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