0

我对在 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();
}

我已经调试了代码,它除了填充列表框之外的所有事情,我假设因为它是一个线程,我错过了一些东西,因为相同的代码与线程一起工作。在将消息发送到主窗口时,我是否需要让线程进入睡眠状态?

任何帮助表示赞赏。

干杯

4

1 回答 1

1

您不希望您的辅助线程尝试直接操作您的 UI 元素(例如SendDlgItemMessage)。相反,您通常希望将类似 aWM_COMMANDWM_USER+N 的内容发布到主窗口,并让它相应地操纵 UI 元素。

于 2013-05-28T21:16:13.770 回答