首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++/CLI中的_beginthread多线程

C++/CLI中的_beginthread多线程
EN

Stack Overflow用户
提问于 2012-06-28 13:44:48
回答 2查看 1.1K关注 0票数 0

我在c++ 10 express中遇到了c++的问题:我的代码:

代码语言:javascript
复制
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:pure或/clr:safe编译的函数的无效调用约定'__cdecl’ 错误C2664:‘入门线程’:无法将参数1从‘_cdecl *)(void *)’转换为‘__cdecl* (__cdecl *)’

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-28 13:57:40

编译器错误中可以看出,您正在用/clr:pure/clr:safe编译您的项目(在这种情况下,您不是用C++编程,而是使用C++/CLI ),因此不能使用__cdecl调用约定,而这又是_beginthread所需要的。

如果您正在使用C++/CLI (因此也是.NET)编程,那么为什么不直接使用.NET的线程处理工具而不是奇怪的伪标准-Win32 32包装器_beginthread

如果您想使用C++/CLI,但仍然能够使用好的旧_beginthread,那么尝试使用/clr而不是/clr:pure编译它,后者允许具有__cdecl调用约定的非托管函数。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 13:55:47

尝试使用/clr而不是/clr:pure来编写您的程序。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11246052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档