我在microsoft visual studio c ++ 10 express中遇到了_beginthread的问题: 我的代码:
void __cdecl DashThread( void * Args ) // function without any class refs
{
while(1){
MessageBox::Show("work");
Sleep(5000);
}
_endthread();
}
private:
System::Void button8_Click_1(System::Object^ sender, System::EventArgs^ e) {
HANDLE HDash = ( HANDLE ) _beginthread(DashThread, 0, NULL );
}
和错误:
错误C3641:'DashThread':使用/ clr编译的函数调用约定'__cdecl'无效:pure或/ clr:safe
错误C2664:' beginthread':无法将参数1从'void( _cdecl *)(void *)'转换为'void(__ cdecl *)(void *)'
答案 0 :(得分:1)
尝试使用/ color而不是/ clr:pure来构建程序。
答案 1 :(得分:1)
从compiler error开始,您似乎正在使用/clr:pure
或/clr:safe
编译项目(在这种情况下,您不是使用C ++进行编程,而是使用C ++ / CLI编程),因此无法使用__cdecl
调用约定,而_beginthread
则需要该约定。
如果您正在使用C ++ / CLI(以及.NET)进行编程,那么为什么不使用.NET的线程设施而不是奇怪的伪标准-Win32-wrapper _beginthread
?
如果你想使用C ++ / CLI,但仍然可以使用好的_beginthread
,那么尝试使用/clr
而不是/clr:pure
来编译它,这允许非可以具有__cdecl
调用约定的托管函数。