实在搞不定了,请教,主线程,子线程之间传递值问题, 请教各位高手.
我的大概实现方式如下:假设计算两个数相加需要很长时间,现在要进行三次计算,为了节省时间,所以采用多线程方法,使这三次计算同时进行。请在空白处填入适当的代码。
struct DATA
{
int a;
int b;
};DWORD WINAPI Plus(LPVOID Param)
{ DATA Temp = (DATA*)Param; DWORD dRData = Temp.a + Tamp.b;
//-------请帮忙实现一下注释部分
// PostThreadMessage() 给主线程发送消息, 将dRData值传送给主线程
}void main()
{
DATA a={4,7},b={6,23},c={12,9};
int result1,result2,result3; // 线程中的值好像只有全局变量和消息方式传出
HANDLE handle1 = CreateThread(NULL, 0, Plus, & a, 0, NULL);
WaitForSingleObject(handle1, INFINITE); HANDLE handle2 = CreateThread(NULL, 0, Plus, &b, 0, NULL);
WaitForSingleObject(handle2, INFINITE); HANDLE handle3 = CreateThread(NULL, 0, Plus, &c, 0, NULL);
WaitForSingleObject(handle3, INFINITE); //-------请帮忙实现一下注释部分
//根据线程ID获取子线程传过来的值赋给result1,result2,result3 printf("4+7=%d,6+23=%d,12+9=%d",result1,result2,result3);
}
子线程中的
// PostThreadMessage() 给主线程发送消息, 将dRData值传送给主线程主线程中的
//根据线程ID获取子线程传过来的值赋给result1,result2,result3
搞了好久没实现, 诚恳请求高手实现一下, 拜谢
我的大概实现方式如下:假设计算两个数相加需要很长时间,现在要进行三次计算,为了节省时间,所以采用多线程方法,使这三次计算同时进行。请在空白处填入适当的代码。
struct DATA
{
int a;
int b;
};DWORD WINAPI Plus(LPVOID Param)
{ DATA Temp = (DATA*)Param; DWORD dRData = Temp.a + Tamp.b;
//-------请帮忙实现一下注释部分
// PostThreadMessage() 给主线程发送消息, 将dRData值传送给主线程
}void main()
{
DATA a={4,7},b={6,23},c={12,9};
int result1,result2,result3; // 线程中的值好像只有全局变量和消息方式传出
HANDLE handle1 = CreateThread(NULL, 0, Plus, & a, 0, NULL);
WaitForSingleObject(handle1, INFINITE); HANDLE handle2 = CreateThread(NULL, 0, Plus, &b, 0, NULL);
WaitForSingleObject(handle2, INFINITE); HANDLE handle3 = CreateThread(NULL, 0, Plus, &c, 0, NULL);
WaitForSingleObject(handle3, INFINITE); //-------请帮忙实现一下注释部分
//根据线程ID获取子线程传过来的值赋给result1,result2,result3 printf("4+7=%d,6+23=%d,12+9=%d",result1,result2,result3);
}
子线程中的
// PostThreadMessage() 给主线程发送消息, 将dRData值传送给主线程主线程中的
//根据线程ID获取子线程传过来的值赋给result1,result2,result3
搞了好久没实现, 诚恳请求高手实现一下, 拜谢
{
int a;
int b;
int r;
};DWORD WINAPI Plus(LPVOID Param)
{ DATA *Temp = (DATA*)Param; Temp->r = Temp->a + Tamp->b;
}void main()
{
DATA a={4,7,0},b={6,23,0},c={12,9,0};
HANDLE handle1 = CreateThread(NULL, 0, Plus, &a, 0, NULL);
HANDLE handle2 = CreateThread(NULL, 0, Plus, &b, 0, NULL);
HANDLE handle3 = CreateThread(NULL, 0, Plus, &c, 0, NULL);
//这样3个线程才会同时执行
WaitForSingleObject(handle1, INFINITE);
WaitForSingleObject(handle2, INFINITE);
WaitForSingleObject(handle3, INFINITE); printf("%d+%d=%d,%d+%d=%d,%d+%d=%d",a.a,a.b,a.r,b.a,b.b,b.r,c.a,c.b,c.r);
}
{
int a;
int b;
int *presult;
};DWORD WINAPI Plus(LPVOID Param)
{ DATA Temp = (DATA*)Param; *presult = Temp.a + Tamp.b;
}void main()
{
int result1,result2,result3; // 线程中的值好像只有全局变量和消息方式传出
DATA a={4,7,&result1},b={6,23,result2},c={12,9,result3}; HANDLE handle1 = CreateThread(NULL, 0, Plus, & a, 0, NULL);
HANDLE handle2 = CreateThread(NULL, 0, Plus, &b, 0, NULL);
HANDLE handle3 = CreateThread(NULL, 0, Plus, &c, 0, NULL); WaitForSingleObject(handle1, INFINITE);
WaitForSingleObject(handle2, INFINITE);
WaitForSingleObject(handle3, INFINITE); printf("4+7=%d,6+23=%d,12+9=%d",result1,result2,result3);
}建议看看OpenMp方面的资料,简单多线程更容易实现。
最简单的是一系列_beginthread,然后WaitForMultiplyObject,等待所有线程结束。
写成Data* pData = (Data*)pParam;
像2楼说的在Data结构体中定义一个int* lpResult能解决问题。
具体地说,就是可以使用OpenMP