c/c++语言开发共享在multithreading上下文中正确处理GetLastError(和其他)

假设GetLastError(和变体)是每个线程还是每个进程是正确的? 如果它是per-process的问题在multithreading应用程序中有些明显,因为没有办法保证在失败的调用和GetLastError之间没有进行其他Win32调用。 有时,GetLastError的值很重要。

例如,如果使用IO完成端口,则AcceptEx将返回FALSE(失败)。 WSAGetLastError(类似于GetLastError)将返回ERROR_IO_PENDING以通知您它已被挂起并且失败不是由于其他原因造成的。 问题是,有数十个其他呼叫可以在飞行中并覆盖此值。

这些调用是特定于线程还是特定于进程? 如果是特定于流程,那么如何正确处理?

    这些文档对此非常明确:

    GetLastError函数

    检索调用线程的最后错误代码值。 最后一个错误代码是基于每个线程维护的。 多个线程不会覆盖彼此的最后一个错误代码。

    所以他们说了三次(在一个段落中!):应该足够了,正如刘易斯卡罗尔所说;-)。 因此,没有必要回答假设,例如“但如果它是每个过程而不是每个线程,那么……怎么样?”;-)。

    GetLastErrorWSAGetLastError返回每线程错误代码。 看看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

      (0)
      上一篇 2021年1月13日
      下一篇 2021年1月13日

      精彩推荐