在C ++ / CLI中使用_beginthread进行多线程处理

时间:2012-06-28 13:44:49

标签: multithreading winapi c++-cli beginthread

我在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 *)'

2 个答案:

答案 0 :(得分:1)

尝试使用/ color而不是/ clr:pure来构建程序。

请参阅http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx

答案 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调用约定的托管函数。