1.线程的优先级:
线程的相对优先级有以下取值:
THREAD_PRIORITY_TIME_CRITICAL:Time-critical,关键时间(最高)
THREAD_PRIORITY_HIGHEST:Highest,最高(其实是“次高”)
THREAD_PRIORITY_ABOVE_NORMAL:Above normal,高于标准
THREAD_PRIORITY_NORMAL:Normal,标准
THREAD_PRIORITY_BELOW_NORMAL:Below normal,低于标准
THREAD_PRIORITY_LOWEST:Lowest,最低(其实是“次低”)
THREAD_PRIORITY_IDLE:Idle,空闲(最低)
AfxBeginThread 创建的线程可以直接在创建的时候指定,而 CreateThread 需要创建之后指定!
获取:GetThreadPriority
WINBASEAPI
int
WINAPI
GetThreadPriority(
__in HANDLE hThread
);
hThread是线程的句柄。
返回值是线程的优先级。
设置:SetThreadPriority
BOOL
WINAPI
SetThreadPriority(
__in HANDLE hThread,
__in int nPriority
);
hThread是线程的句柄。
nPriority是线程的优先级。
2.线程的退出与终结:
1、最好的方式:让线程函数主动退出,或者 return;
可以保证线程函数里面对象的析构函数被调用,以及线程申请的相关空间被释放;
2、线程自己主动退出,可以调用 ExitThread(MFC中使用 AfxEndThread);
线程函数里面对象的析构函数不会被调用,线程申请的相关空间被释放;
所以,在C语言里面可以使用该函数退出线程,但在C++里面不建议,因为C++里面有类!
3、其他程序强行结束目标线程:可以调用 TerminateThread
此函数非常危险,被结束的线程不会得到任何通知,线程申请的相关空间也不会被释放!
所以,离他远点!
4、线程退出码的获取:GetExitCodeThread
BOOL GetExitCodeThread (
HANDLE hThread, // in,线程handle,也就是CreateThread()的返回值
LPDWORD lpExitCode //out,存储线程结束代码,也就是线程的返回值
);
说明: 此函数调用成功返回TRUE,失败返回FALSE,只表示这个函数是否调用成功而己.
不能根据返回值来判断一个线程是否结束,而要根据 lpExitCode的值来确定,
lpExitCode 值STILL_ACTIVE 表示线程正在运行.
若线程己经结束,则lpExitCode中存储指定线程的返回值.
前提:句柄有效,不被关闭!