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