我的应用程序必须跟踪时间并在不同阶段提醒用户允许或不允许某些操作。因为用户将等待,我想显示一个进度来显示等待时间。例如,我的设备在启动后必须等待 5 分钟才能准备好使用。问题是用户可以导航到多个对话框,我想在其中 2 个对话框上显示进度条。我使用了一个线程来“运行时钟”,当进度条需要更新或时间活动完成时,它会向 GUI 发布消息。
问题是我可以传递初始窗口的句柄,它可以接收来自线程的通知,但是当用户转到另一个屏幕时会发生什么?这个其他窗口甚至还不存在。我可以使用其他任何机制吗?我的目标是在两个对话框中重用时间检查代码。
一个非常简化的代码如下:
UINT MonitorTimeThread(LPVOID pVoid )
{
HWND hWnd = ( HWND ) pVoid;
HANDLE timer = ::CreateWaitableTimer(NULL, FALSE, NULL);
SYSTEMTIME t;
::GetSystemTime(&t);
LARGE_INTEGER alarm;
::SystemTimeToFileTime(&t, (FILETIME *)&alarm);
::SetWaitableTimer(timer, &alarm, 5000, NULL, NULL, FALSE);
bool done = false;
while (!done )
{
if (WaitForSingleObject( timer, INFINITE ) == WAIT_OBJECT_0 )
{
TRACE("time inteval has passed\r\n");
// update the progress bar on GUI
PostThreadMessage(hWnd, UM_PROGRESS_TICK, 0 );
// if user has switch to another window, how to direct messages to that?
}
}
return 0;
}