Eil*_*idh 1 c++ windows multithreading
我正在尝试使用_beginthreadex进行一些基本的并行化,并按照我给出的示例传递参数,但它不起作用.
有任何想法吗?
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
std::cout << "Hello World!";
}
int main()
{
_beginthreadex(NULL, 0, MyThread, NULL, 0, NULL);
while(true);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
为什么不将NULL作为参数传递工作?(因为该函数无论如何都没有参数?)
传递NULL作为参数列表与_beginthread一起工作正常.
你的代码中有两个错误,它们都与线程函数的参数无关 - NULL就像你猜测的那样好.
问题在于线程函数的签名,并且你得到的错误指出了这一点.首先,它必须是一个__stdcall功能,其次它必须返回一个unsigned int.你的功能是__cdecl并返回void.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
应该为你解决问题.
显然,在您的代码中您没有传递任何参数。要传递变量,您必须执行以下操作(例如):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
Run Code Online (Sandbox Code Playgroud)
更新:由于您以后发布了编译问题:显然您的线程函数需要返回一个整数:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)