主UI处理线程消息

时间:2013-06-02 09:20:35

标签: c multithreading winapi

我正在编写一个win32应用程序,允许操作员一次在4个设备上执行测试。所以我有4个线程同时运行,这按预期工作(虽然可能更有效)。我遇到的问题是,当线程尝试向主UI发送Pass或Fail以显示给操作员时,我调试了PostMessage调用并返回'1',但是列表框中没有显示任何应该显示的内容结果。这是一些代码;

首先是线程函数,这与其他3个线程相同

void Thread1(PVOID pvoid)
{
    for(int i=0;i<numberOfTests1;i++) {     
        //DWORD id = GetCurrentThreadId();
        int ret;
        double TimeOut = 60.0;
        int Lng = 1;
        test1[i].testNumber = CMD_TOOL_BUZZER;
        //test1[i].testNumber = getTestNumber(test1[i].testName);
        unsigned char Param[255] = {0};
        unsigned char Port1 = port1;

        ret = PSB30_Open(Port1, 16);
        ret = PSB30_SendOrder (Port1, test1[i].testNumber, &Param[0], &Lng, &TimeOut); 
        ret = PSB30_Close (Port1);
        int result = 0;

        if(*Param == 1) {
            PostMessage(hWnd,WM_TEST_PASS,i,(LPARAM)"PASS");
            test1[i].passed = true;
         }
        else PostMessage(hWnd, WM_TEST_FAIL, i, (LPARAM)"FAIL") ;
     }
    _endthread();
}

主要是消息处理程序;

while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;

最后是用户定义的消息;

case WM_TEST_PASS:
    i = wParam;
    SendDlgItemMessage(hWnd,IDT_RESULTLIST1,LB_ADDSTRING,i,(LPARAM)"PASS");
    MessageBox(hWnd,"test",0,0); //debug
break;

我还有什么需要在列表框中显示结果,我最后还是以此为止。

注意,我已经尝试过PostThreadMesage和SendMessage并得到相同的结果,这让我认为问题在于消息处理程序或我的用户定义消息

感谢您寻找

0 个答案:

没有答案