如何使用 _beginthreadex()
启动线程,使其执行 void myFunction(wchar_t *param);
?我尝试使用这个:
_beginthread(NULL, 0, myFunction, L"someParam", 0, &ThreadID);
但是有编译错误:
error C2664: 'beginthreadex' : cannot convert parameter 3 from 'void (_cdecl *)(wchar_t *)' to 'unsigned int (__stdcall *)(void *)'.
我该如何解决这个错误?我似乎可以执行 _beginthread((void(*)(void*))myFunction, 0 , (void *)L"someParam");
。但是对于 _beginthreadex()
这些转换似乎不起作用。做什么
我需要去做?
此代码不输出任何内容。怎么了?
unsigned int __stdcall myFunction( void *someParam )
{
printf("Hello world!");
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthreadex(NULL, 0, myFunction, L"param", 0, NULL);
return 0;
}
最佳答案
_beginthreadex
需要一个使用 __stdcall
calling convention 的函数,而不是默认的 __cdecl
调用约定。要修复它,请使用 __stdcall
调用约定声明您的线程过程:
unsigned int __stdcall myFunction(void *arg)
{
...
}
不要将您传递的函数指针转换为 _beginthread
或 _beginthreadex
:a function pointer cast is a bug waiting to happen .
关于c++ - C++中定义线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939220/