gpt4 book ai didi

C++/Winforms 线程 : I get a build error with _beginthread

转载 作者:行者123 更新时间:2023-11-28 03:22:53 25 4
gpt4 key购买 nike

我是线程和 Winforms/C++ 的新手。当我按下一个按钮时,我想在一个新线程中启动一个函数。我一直在关注这个 tutorial对于线程。当我在单独的 VC++ 项目中构建该站点上给出的示例代码时,构建成功

但是,如果我在我的 C++/Winforms 中执行以下操作,构建将无法完成,我会收到构建错误

我在这里错过了什么?

帮助!

代码:

void  Test( void *arg );
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
_beginthread(Test, 0, (void*)12);
}
void Test( void *arg )
{
// Do something
}

构建错误:

Error   1   error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__clrcall *)(void *)' to 'void (__cdecl *)(void *)'    c:\users\documents\visual studio 2010\projects\statsv2.0\statsv2.0\Form1.h  659 1   StatsV2.0

最佳答案

您使用的是托管 C++ (C++/CLR)。这与 native C++(本教程为其编写)有很大不同。

在托管 C++ 中,默认调用约定与 native _beginthread 函数期望的函数指针调用约定不兼容。幸运的是,托管 C++ 与 native C++ 具有很好的互操作性,将函数声明更改为以下内容应该可行:

void __cdecl Test( void *arg )

由于您使用的是托管 C++,因此您拥有 .NET 的全部功能,并且可以改为创建托管线程(例如使用 Task 对象)。

另请注意,在主线程上创建的任何 win32 UI 对象必须只能在该线程上访问——所以要小心! :-)

关于C++/Winforms 线程 : I get a build error with _beginthread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14972461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com