我在 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));
}
}
程序运行顺利,结果正确。但我希望能够在每个测试项目完成后看到结果,而不是等到所有测试项目都完成后
我也尝试过创建一个线程来发送消息,但没有成功。也许是我没有正确使用它。怎样才能达到我想要的效果呢?预先感谢您的帮助。
为长时间运行的任务生成一个线程 RunFactoryTest 是一个理想的解决方案,不会阻止 UI 更新。
使用 CreateThread 来调用 RunFactoryTest,而不是直接调用它。
HANDLE hThread;
hThread = CreateThread(NULL,0,ThreadFunction,NULL,0,NULL);
在ThreadFunction中,调用RunFactoryTest。
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
RunFactoryTest();
return 0;
}