在win32中的线程中向主窗口发送消息

时间:2013-05-28 19:51:21

标签: c multithreading winapi

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

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

感谢任何帮助。

干杯

1 个答案:

答案 0 :(得分:1)

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