我正在编写一个 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 并得到相同的结果,这让我认为问题出在消息处理程序或我的用户定义的消息上
感谢您的关注