警告:这是示例代码。
我需要定义这个 typedef 和这个定义才能使代码顺利编译。
我有以下代码,我需要知道 __WHAT_HERE1 和 __WHAT_HERE2 中应该包含什么内容:
#include <windows.h>
#include <winbase.h>
_ifdef _WIN32_
typedef ____WHAT_HERE1 THREAD_TYPE;
_endif
_ifdef _LINUX_
typedef void (*THREAD_TYPE);
_endif
THREAD_TYPE thread_function( void * )
{
}
class ThreadInfo {
public:
_ifdef _WIN32_
____WHAT_HERE2 func;
LPVOID args;
_endif
_ifdef _LINUX_
void *(*func) (void*);
void *args;
_endif
}
ThreadInfo *infoThread;
CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE) infoThread->func,
infoThread->args,
0,
NULL
);
最佳答案
您可以从粘贴的代码中推断出类型:
根据
CreateThread
文档中,第三个参数的类型为LPTHREAD_START_ROUTINE
。当你施放infoThread->func
时,你显然已经意识到了这一点。对此。因此,
____WHAT_HERE2
(infoThread->func
的类型)应该是LPTHREAD_START_ROUTINE
.因为您可能会分配
thread_function
的地址函数为infoThread->func
,函数的返回值(在代码草图中用____WHAT_HERE1
表示)应该是LPTHREAD_START_ROUTINE
指示的返回类型。 。检查LPTHREAD_START_ROUTINE
文档显示这是DWORD
.
但是,这还不够,因为在 Windows 上,线程过程使用 __stdcall
调用约定。在定义 thread_function
时,您需要考虑到这一点。 .
关于c++ - 如何输入定义来调用 CreateThread、LPTHREAD_START_ROUTINE、lpStartAddress、ThreadProc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136985/