这不应该发生,我也不能确切解释
为什么?
是的。不过,我确实有一些建议。
首先,你没有打电话
TranslateMessage()
之前
DispatchMessage()
在你的信息泵里。那是坏的juju,你不想在附近的任何地方坏juju
MsgWaitForMultipleObjects()
.
您也可以尝试显式调用
MsgWaitForMultipleObjectsEx()
以防出现同样的问题:
DWORD ret = MsgWaitForMultipleObjectsEx(2, events, INFINITE, QS_ALLINPUT, 0);
最后,这可能有些牵强,但考虑一下之后会发生什么。
msgwaitformultipleObjects()。
返回和之前
GetLastError()
被称为。不考虑分配给
ret
,我看到一个隐式调用
std::wstring
的构造函数。
你能保证吗
STD::
的构造函数没有清除线程上一个错误代码的副作用?我当然不能,所以我把电话转到
GETLASTROR()
变成一个好的,老式的,原子的任务
DWORD
变量位于
case
语句。