警告:这是示例代码。
我需要定义这个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
);
答案 0 :(得分:3)
您可以从粘贴的代码中推断出类型:
根据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
时,您需要考虑到这一点。