c++ - 将一个函数传递给不同的线程

标签 c++ multithreading function

我必须创建一个必须创建多个线程的应用程序。所以我想尝试制作一个函数并将其传递给不同的线程。最初我创建了两个线程并声明了一个函数要传递给它们。我要做的就是将不同的整数传递给这些线程并将其显示在线程函数中,这是我的代码:

DWORD WINAPI Name(LPVOID lpParam)
{
    int *Ptr=(int*)lpParam;

    for(int j=0;j<2;j++)
    {
        cout<<"Thread"<<endl;
        cout<<*Ptr<<endl;
    }

    return 0;
}
int main()
{
    int a=10,b=15,c=25;
    HANDLE thread1,thread2;
    DWORD threadID,threadID2;
    thread2= CreateThread(NULL,0,Name,LPVOID(a),0,&threadID2);
    thread1= CreateThread(NULL,0,Name,LPVOID(b),0,&threadID);

    for(int i=0;i<5;i++)
    {
        cout<<"Main Thread"<<endl;
    }

    if(thread1==NULL)
    {
        cout<<"Couldn't Create Thread:("<<endl;
        exit(0);
    }
    if(thread2==NULL)
    {
        cout<<"Couldn't Create Thread:("<<endl;
        exit(0);
    }
    return 0;
}

但这段代码运行不正常,即编译正常,启动正常但之后给出调试错误。 有人可以让我知道我的错误以及如何纠正它因为能够为多个线程使用一个函数对我来说真的很有帮助。

最佳答案

等待您的子线程返回。这样做:

int main()
{
    int a=10,b=15,c=25;
    HANDLE thread[2];
    DWORD threadID,threadID2;
    thread[1]= CreateThread(NULL,0,Name,LPVOID(a),0,&threadID2);
    thread[0]= CreateThread(NULL,0,Name,LPVOID(b),0,&threadID);

    for(int i=0;i<5;i++)
    {
        cout<<"Main Thread"<<endl;
    }

    if(thread[0]==NULL)
    {
        cout<<"Couldn't Create Thread:("<<endl;
        exit(0);
    }
    if(thread[1]==NULL)
    {
        cout<<"Couldn't Create Thread:("<<endl;
        CloseHandle(thread[0]);
        exit(0);
    }
    WaitForMultipleObjects(2, thread, TRUE, INFINITE);
    CloseHandle(thread[0]);
    CloseHandle(thread[1]);
    return 0;
}

线程的句柄在线程终止时发出信号(引用 CreateThread )。

关于c++ - 将一个函数传递给不同的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335719/

相关文章:

linux - 如何重定向到代码中更靠后的函数?

c++ - 代码块调试预处理器

c++ - vkCreateInstance 导致段错误

android - 将 AsyncTask 与数据库一起使用

java - 将服务层传递给线程的正确方法

java - Java的for循环中是否有线程安全优化?

具有默认非必需值的 Javascript 函数

javascript - JS/TS 最聪明的方法如何遍历对象数组并进行一些更改

c++ - 如何修复 C/C++ 中的堆损坏?

javascript - 如何遍历Cheerp/js中的动态命名对象?