0
我看过一篇MSDN文章,彻底困惑:我怎样才能取消LengthyOperation在WindowProc中
HWND hwnd;
BOOL fDone;
MSG msg;
// Begin the operation and continue until it is complete
// or until the user clicks the mouse or presses a key.
fDone = FALSE;
while (!fDone)
{
fDone = DoLengthyOperation(); // application-defined function
while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
switch(msg.message)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_KEYDOWN:
//
// Perform any required cleanup.
//
fDone = TRUE;
}
}
}
MSDN说,与此代码一个漫长的操作过程中,我们可以检查消息队列 &取消以案例的鼠标单击或键盘KeyDown。 这是怎么回事?
当DoLengthyOperation开始时,直到它完成并且PeekMessage不会在此时间内调用并且不能取消操作时才会返回。
MSDN链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644928
假设该函数返回* false *一段时间,表明冗长的操作还没有完成。关键是要把一个长期的操作分解成许多较小的操作。 –
您不能在* GUI *线程中调用'DoLengthyOperation();' - 需要在单独的工作线程中调用它。直到'DoLengthyOperation();'在您的代码示例中执行 - 您没有调用PeekMessage'因此没有任何Windows消息,并且您的UI冻结 – RbMm
@HansPassant如果函数在一段时间内返回false,从前一次调用的最后一行代码中执行?在下一次调用函数中再次运行第一行 –