提问人:renfeiyu 提问时间:11/15/2023 最后编辑:renfeiyu 更新时间:11/15/2023 访问量:86
我使用SendMessage,但响应似乎被阻止了
I use SendMessage but the responses seem to be blocked
问:
我在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));
}
}
程序运行流畅,结果正确。但是我希望能够在每个测试项目完成后看到结果,而不是等到所有测试项目都完成。
我还尝试创建一个线程来发送消息,但没有用。也许我没有正确使用它。我怎样才能达到我想要的效果?提前感谢您的帮助。
答:
0赞
renfeiyu
12/1/2023
#1
为长时间运行的任务 RunFactoryTest 生成线程是一个理想的解决方案,并且不会阻止 UI 更新。
使用 CreateThread 调用 RunFactoryTest,而不是直接调用它。
HANDLE hThread;
hThread = CreateThread(NULL,0,ThreadFunction,NULL,0,NULL);
在 ThreadFunction 中,调用 RunFactoryTest。
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
RunFactoryTest();
return 0;
}
上一个:不理解 C++ 窗口中的字符
评论
RunFactoryTest
RunFactoryTest
UpdateWindow(hwndListView);
PostMessage
SendMessage