在 VC 编程中,若是涉及到多线程编程时,有时我们也需要根据情况获取子线程入口函数的退出码,以便根据具体的程序运行情况做相应的处理。
之前我在使用 VC 开发程序时,也遇到过需要获取子线程入口函数的退出码的问题,由于起初没有做过相似的程序,所以只会定义一个全局变量来根据情况,在子线程的入口函数里再为其赋予相应的值。虽然这也是一种方法,但根本不能决定根本的问题,而且若程序中的全局变量定义太多的话又容易造成程序的混乱,但是根据线程入口函数的声明方式,明显是有返回值的,所以我们可以根据它来在主线程直接获取子线程的退出码。
因此我上网搜索了一下,网上基本都说可以通过在主 线程里面直接调用 GetExitCodeThread() 函数来得到子线程入口函数的退出码。
GetExitCodeThread()这个函数确实可以得到子线程入口函数的退出码,但是真要使用它来得倒子线程入口函数的退出码的话是有条件的。我在网上搜多了许久,都没有具体说到这点,很零碎,最后我根据自己的实践,在结合 MSDN 上面的介绍,以及网上的一些资料,终于成功解决的这个问题。以下我就把我的总结归纳一下,以便以后查询时可以用到,同时,也希望能帮到其他同仁们!
首先,GetExitCodeThread()这个函数可以直接得到由 CreateThread() 创建的子线程入口函数的退出码。以下我举个测试的例子吧!
先创建一个基于MFC的控制台工程,这样比较方便测试。这个不用我来教大家怎么创建吧,呵呵!
然后在源文件开头,可以在 main 函数外面定义一下变量:
HANDLE hThread;
DWORD errCode = 100;
同时声明子线程入口函数:
DWORD WINAPI ThreadFunc( LPVOID lpParameter );
接着在特定位置添加以下代码:
好了,现在就是编写子线程入口函数了,代码如下: