可以帮我看一下吗?——MFC关闭线程的问题!谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/15 06:11:53
首先,我在main函数中,创建了两个ServerThread进程:
AfxBeginThread(ServerThread,0);
AfxBeginThread(ServerThread,0);
现在,我要将这两个进程关掉,确不知道怎么办!
非常感谢!

AfxEndThread(
UINT nExitCode,
BOOL bDelete = TRUE
);

正常线程终止
对于辅助线程,正常线程终止很简单:退出控制函数并返回表示终止原因的值。可以使用 AfxEndThread 函数或 return 语句。一般情况下,0 表示成功完成,但这取决于您自己。

对于用户界面线程,该过程也很简单:从用户界面线程内调用 Windows SDK 中的 PostQuitMessage。PostQuitMessage 采用的唯一参数是线程的退出代码。对于辅助线程,0 通常表示成功完成。

过早的线程终止
过早终止线程几乎一样简单:从线程内调用 AfxEndThread。将所需的退出代码作为唯一参数传递。这将停止执行线程、解除对线程堆栈的分配、分离附加到线程的所有 DLL 并从内存中删除线程对象。

必须从要终止的线程内调用 AfxEndThread。如果要从其他线程终止线程,必须设置两个线程间的通信方法。

检索线程的退出代码
若要获取辅助线程或用户界面线程的退出代码,请调用 GetExitCodeThread 函数。有关此函数的信息,请参见 Windows SDK。此函数获取线程(存储在 CWinThread 对象的 m_hThread 数据成员中)的句柄和 DWORD 的地址。

如果线程仍然是活动的,GetExitCodeThread 将 STILL_ACTIVE 放置在提供的 DWORD 地址中;否则将退出代码放置在该地址中。

检索 CWinThread 对象的退出代码还需要一步。默认情况下,当 CWinThread 线程终止时,删除该线程对象。这意味着不能访问 m_hThread 数据成员,因为 CWinThread 对象不再存在。若要避免出现这种情况,请执行以下操作之一:

将 m_bAutoDelete 数据成员设置为 FALSE。这使 CWinThread 对象在线程终止后仍可以继续存在。然后可以在线程终止后,访问 m_hThread 数据成员。但是,如果使用此方法,就得销毁