假设GetLastError(和变体)是每个线程还是每个进程是正确的? 如果它是per-process的问题在multithreading应用程序中有些明显,因为没有办法保证在失败的调用和GetLastError之间没有进行其他Win32调用。 有时,GetLastError的值很重要。
例如,如果使用IO完成端口,则AcceptEx将返回FALSE(失败)。 WSAGetLastError(类似于GetLastError)将返回ERROR_IO_PENDING以通知您它已被挂起并且失败不是由于其他原因造成的。 问题是,有数十个其他呼叫可以在飞行中并覆盖此值。
这些调用是特定于线程还是特定于进程? 如果是特定于流程,那么如何正确处理?
这些文档对此非常明确:
GetLastError函数
检索调用线程的最后错误代码值。 最后一个错误代码是基于每个线程维护的。 多个线程不会覆盖彼此的最后一个错误代码。
所以他们说了三次(在一个段落中!):应该足够了,正如刘易斯卡罗尔所说;-)。 因此,没有必要回答假设,例如“但如果它是每个过程而不是每个线程,那么……怎么样?”;-)。
GetLastError
和WSAGetLastError
返回每线程错误代码。 看看MSDN条目:
您可以在MSDN上阅读(请参阅https://msdn.microsoft.com/en-us/library/ms679360.aspx )关于您的问题的明确答案:
检索调用线程的最后错误代码值。 最后一个错误代码是基于每个线程维护的。 多个线程不会覆盖彼此的最后一个错误代码。
以上就是c/c++开发分享在multithreading上下文中正确处理GetLastError(和其他)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549166.html