实在搞不定了,请教,主线程,子线程之间传递值问题, 请教各位高手.
我的大概实现方式如下:假设计算两个数相加需要很长时间,现在要进行三次计算,为了节省时间,所以采用多线程方法,使这三次计算同时进行。请在空白处填入适当的代码。
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
搞了好久没实现, 诚恳请求高手实现一下, 拜谢

解决方案 »

  1.   

    struct DATA
    {
        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);
    }
      

  2.   

    struct DATA
    {
        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方面的资料,简单多线程更容易实现。
      

  3.   

    不应该用postmessage。你需要消息循环,传递复杂参数比较麻烦,判断是否所有工作线程完成也不方便。
    最简单的是一系列_beginthread,然后WaitForMultiplyObject,等待所有线程结束。
      

  4.   

    主线程中等所有的event都置位了,才继续.
      

  5.   

    Data Temp = (Data*)pParam; 这句你居然能编译过。
    写成Data* pData = (Data*)pParam;
    像2楼说的在Data结构体中定义一个int* lpResult能解决问题。
      

  6.   

    楼主如果时间和运行环境允许,可以使用并行计算,
    具体地说,就是可以使用OpenMP