0

我正在编写一个 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();
}

在 main 中,消息处理程序;

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 并得到相同的结果,这让我认为问题出在消息处理程序或我的用户定义的消息上

感谢您的关注

4

0 回答 0