我使用SendMessage,但回复似乎被阻止了

问题描述 投票:0回答:1

我在 RunFactoryTest 函数中有很多测试函数要做。它们被放入函数指针数组cbTestArray[MAXNUM]中。每个函数执行后,我想立即在 ListView 中显示其返回值。但结果是测试运行时ListView中什么也没有出现。并且直到所有测试功能完成后,所有返回值都会一起显示。

这就是我所做的:

typedef bool (*CbFactoryTestFunction)();

void RunFactoryTest(){
    CbFactoryTestFunction cbTestArray[MAXNUM] = {test1,test2,test3...};  //here are the functions used for testing
    bool ret = false;
    LVITEM lvi;  //used to set item in ListView
    for(i = 0;i < MAXNUM;i++)
    {
        ret = cbTestArray[i]();    // test success, show "OK"; fail , show "NG"
            //omit some steps
        
        if(ret){
            lvi.pszText = "OK";
        }else{
            lvi.pszText = "NG";
        }
        SendMessage(hwndListView, LVM_SETITEM, 0, reinterpret_cast<LPARAM>(&lvi));
    }
}

程序运行顺利,结果正确。但我希望能够在每个测试项目完成后看到结果,而不是等到所有测试项目都完成后

我也尝试过创建一个线程来发送消息,但没有成功。也许是我没有正确使用它。怎样才能达到我想要的效果呢?预先感谢您的帮助。

c++ winapi
1个回答
0
投票

为长时间运行的任务生成一个线程 RunFactoryTest 是一个理想的解决方案,不会阻止 UI 更新。

使用 CreateThread 来调用 RunFactoryTest,而不是直接调用它。

HANDLE hThread;
hThread = CreateThread(NULL,0,ThreadFunction,NULL,0,NULL);

在ThreadFunction中,调用RunFactoryTest

DWORD WINAPI ThreadFunction(LPVOID lpParam) {       
    RunFactoryTest();
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.