这是我在 C++ 代码实现中遇到的问题。
在主线程中,创建了一个显示带有取消按钮的静态文本的对话框,该按钮还旋转了一个子线程。
在后台线程(或子线程)中检查数据库以查看某个状态字段是否已更新。如果更新,则返回 true,否则继续定期轮询数据库。
预期行为 - 显示带有取消按钮的对话框,继续显示它,直到子线程发出事件信号或用户点击取消按钮。
我在主线程中创建了一个未发出信号状态的事件,该事件状态将由子线程修改(当状态字段更新时)。
问题是如果我阻塞主线程直到它从后台线程得到响应,用户无法点击对话框中的取消按钮,它总是伴随着沙漏符号。
不知道下面的代码有什么问题。
HANDLE mainThread = NULL;
HANDLE ghWriteEvent;
MainMethod()
{
mainThread = GetCurrentThread() ;
dlgCancelDialog dog // dialog with cancel button .
ghWriteEvent = CreateEvent( NULL, TRUE, FALSE, TEXT("WriteEvent") );
HANDLE hThread = CreateThread(0,0, childThread, &threadData,0,NULL);
dlg.showDialog(); // Show dialog with cancel button .
DWORD dwWaitResult = WaitForSingleObject( ghWriteEvent, INFINITE);
//AT THIS POINT i WANT TO SAY WAIT FOR SIGNAL EVENT OR WAIT UNTIL CANCEL OPERATION IS HIT , BUT THE DIALOG IS SHOWN WITH HOURGLASS SYMBOL.
switch (dwWaitResult)
{
// Event object was signaled
case WAIT_OBJECT_0:
break;
}
dlg.hideDialog();
} //子线程代码。
childThread(LPVOID lpParam)
{
while(!databaseIsUpdated) // Check database.
{
Sleep(1000);
}
if (! SetEvent(ghWriteEvent) )
{
return 0;
}
return 0;
}