AfxBeginThread和AfxEndThread

来源:互联网 发布:淘宝网禁售电话卡 编辑:程序博客网 时间:2024/06/05 09:47

启动线程:

 

CWinThread* AfxBeginThread( 线程函数,this );

 

线程的退出:

 

在刚刚使用的时候,退出线程的方法有问题,导致退出的时候异常。

 

下面说线程退出的方法:

 

1.线程函数返回

 

线程都在死循环中,当满足一定条件时,return,也会将线程结束。

 

2.AfxEndThread

 

这个函数只能用在线程函数中,当满足一定条件是,调用。

 

举一个例子:

 

可以创建一个信号量,用WaitForSingleObject函数来检测该信号量的状态。

 

成员变量 m_hThreadEvent;

 

m_hThreadEvent = CreateEvent( NULL, FALSE, FALSE, NULL );

 

线程的执行函数:

 

         for ( ; ; )

 

         {

 

                   DWORD dwRetVal;

 

                   dwRetVal = WaitForSingleObject( m_hThreadEvent, 100 );

 

                   if ( dwRetVal == WAIT_TIMEOUT )

 

                   {

 

                            // TODO:

 

                   }

 

                   else

 

                   {

 

                            // stop receive text thread.

 

                            DWORD dwExitCode;

 

                            GetExitCodeThread( m_pThreadRecv->m_hThread, &dwExitCode );

 

                            AfxEndThread( dwExitCode, TRUE );

 

                   }

 

         }

 

    要结束线程时,使用SetEvent,将信号量置为有信号。

 

    该线程是在信号量有信号时,退出。

 

3.     TerminateThread

 

在CWinThread对象中有线程的句柄,可以使用该句柄强行杀死线程。但是不推荐使用这种方式,当可以正常结束的时候,选择前两种方法较好。