将参数传递给_beginthreadex

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一起工作正常.

Ant*_*ams 7

你的代码中有两个错误,它们都与线程函数的参数无关 - NULL就像你猜测的那样好.

问题在于线程函数的签名,并且你得到的错误指出了这一点.首先,它必须是一个__stdcall功能,其次它必须返回一个unsigned int.你的功能是__cdecl并返回void.

unsigned __stdcall MyThread(void *data)
{
    std::cout << "Hello World!"; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

应该为你解决问题.


Con*_*ius 5

显然,在您的代码中您没有传递任何参数。要传递变量,您必须执行以下操作(例如):

#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)