Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;新手问题:ThreadProc 我只是想了解C++中的一些源代码。我有点熟悉 但是,用C++,下面的代码序列对我来说绝对是新的。一个猜测是 在这里,我向内核注册了一些线程例程,ptest->Run()。这是对的吗 static unsigned int __stdcall ThreadProc(void *lParameter) { CTest *ptest; ptest= (Ctest *)lParameter; ptest->Run(); return 0; } CTest::CTest(int n) { ... }_C++ - Fatal编程技术网

C++;新手问题:ThreadProc 我只是想了解C++中的一些源代码。我有点熟悉 但是,用C++,下面的代码序列对我来说绝对是新的。一个猜测是 在这里,我向内核注册了一些线程例程,ptest->Run()。这是对的吗 static unsigned int __stdcall ThreadProc(void *lParameter) { CTest *ptest; ptest= (Ctest *)lParameter; ptest->Run(); return 0; } CTest::CTest(int n) { ... }

C++;新手问题:ThreadProc 我只是想了解C++中的一些源代码。我有点熟悉 但是,用C++,下面的代码序列对我来说绝对是新的。一个猜测是 在这里,我向内核注册了一些线程例程,ptest->Run()。这是对的吗 static unsigned int __stdcall ThreadProc(void *lParameter) { CTest *ptest; ptest= (Ctest *)lParameter; ptest->Run(); return 0; } CTest::CTest(int n) { ... },c++,C++,什么操作系统?看起来像是一个Windows示例,如果是这样的话,可以是begin_thread()、CreateThread或…几个稍微简化,但线程是一个函数,在本例中是ThreadProc。当线程启动时,调用函数,当函数退出时,线程死亡 在本例中,有人使用CreateThread、begin_thread或其他方法启动了一个线程,并将指向名为CTest的类的指针作为参数传入。然后,线程将其强制转换回CTest*(正如您所看到的,该参数由CreateThread API作为更通用的void*传递

什么操作系统?看起来像是一个Windows示例,如果是这样的话,可以是begin_thread()、CreateThread或…几个

稍微简化,但线程是一个函数,在本例中是ThreadProc。当线程启动时,调用函数,当函数退出时,线程死亡

在本例中,有人使用CreateThread、begin_thread或其他方法启动了一个线程,并将指向名为CTest的类的指针作为参数传入。然后,线程将其强制转换回CTest*(正如您所看到的,该参数由CreateThread API作为更通用的void*传递),并在退出之前调用CTest::Run方法


编辑:此外,除了“\u stdcall”声明之外,这不是非常特定于Windows的。在所有OSES中,C和C++中的线程或多或少都是这样工作的。

< P>不完全是这样。这是您的线程函数:

static unsigned int __stdcall ThreadProc(void *lParameter)
它将在不同的线程中执行,而不是由其他线程引起的。调用代码创建一个CTest类型的对象,创建一个运行ThreadProc的线程,该线程依次运行ptest->Run()


ThreadProc只是一个方便的包装器,用于启动ptest->Run()。(因为使用指向成员函数的指针有点困难)

显示的代码声明了指向CTest类对象的指针,将输入参数转换为这些参数之一,然后调用其run方法

为什么要这样做是一个棘手的部分。通常您不会编写这样的代码,但是,ThreadProc的概要文件是线程的主入口点的概要文件。其中一个原因是,Windows没有为它的参数配置文件提供任何选择,并且它不能是类成员

您所拥有的是相当标准的代码,可以将线程入口点回调从Windows的必需表单转换为类方法调用


有关此问题的详细讨论,请参阅我(已接受)的问题答案:

这是一个函数签名,用于定义从DLL导出的函数或用作回调函数的函数。在这种情况下,它可能会被用于工作线程的主循环

\uu stdcall
关键字表示使用在堆栈上传递函数调用(与从Win32 API导出的方法使用的相同)

哎呀:这个链接不能很好地处理降价
http://msdn.microsoft.com/en-us/library/zxk0tw93(VS.80).aspx

为您修复了链接;无论如何,(VS.80)部分在MSDN URL中并不重要。