我对使用Win32 api中的线程相对较新,并且遇到了一个我无法解决的问题。
继承我的问题,我有4个线程(它们按预期工作),允许操作员测试4个终端。在每个线程中,我尝试使用Pass或Fail向主窗体表单发送消息,这将放在列表框中。下面是其中一个主题,其余的完全相同。
void Thread1(PVOID pvoid)
{
for(int i=0;i<numberOfTests1;i++) {
int ret;
double TimeOut = 60.0;
int Lng = 1;
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);
if(*Param == 1) SendDlgItemMessage(hWnd,IDT_RESULTLIST1,LB_ADDSTRING,i,(LPARAM)"PASS");
else SendDlgItemMessage(hWnd,IDT_RESULTLIST1,LB_ADDSTRING,i,(LPARAM)"FAIL");
}
_endthread();
}
我已经调试了代码并且除了填充列表框之外它做了所有事情,我假设因为它是一个线程我错过了一些东西,因为相同的代码与线程一起工作。我是否需要在将消息发送到主窗口时将线程置于休眠状态?
感谢任何帮助。
干杯
答案 0 :(得分:1)
您不希望您的辅助线程尝试直接操作您的UI元素(例如SendDlgItemMessage
)。相反,您通常希望将类似WM_COMMAND
或WM_USER
+ N的内容发布到主窗口,然后相应地操纵UI元素。