线程的相关操作

----------------------------------------------------------------------------------------
①、线程的挂起与恢复:SuspendThread、ResumeThread
在线程创建并运行后,用户可以对线程执行挂起和恢复操作,
挂起就是指暂停线程的执行,当然有暂停就有恢复,之后,用户可以通过指定的操作来恢复线程的正常执行!


※※※ 注意:线程的挂起与恢复是有次数的,即:可以多次挂起,但是之后想进行线程的正常执行必须进行多次恢复操作!
具体见演示!
===================================================
②、线程的优先级:


线程的相对优先级有以下取值:


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
设置:SetThreadPriority


UINT __cdecl ThreadProc1(LPVOID lpParameter)
{
CStdioFile mFile;
mFile.Open(_T("C:\\123.txt"), CFile::modeCreate | CFile::modeReadWrite);
int tipMsg = (int)lpParameter;
CString strTipMsg;
while(TRUE) {
strTipMsg.Format(_T("%d\r"), tipMsg);
mFile.WriteString(strTipMsg);
}


mFile.Close();


return 0;
}


UINT __cdecl ThreadProc2(LPVOID lpParameter)
{
CStdioFile mFile;
mFile.Open(_T("C:\\456.txt"), CFile::modeCreate | CFile::modeReadWrite);
int tipMsg = (int)lpParameter;
CString strTipMsg;
while(TRUE) {
strTipMsg.Format(_T("%d\r"), tipMsg);
mFile.WriteString(strTipMsg);
}


mFile.Close();


return 0;
}


void CThreadTestDlg::OnBnClickedBtn()
{
CWinThread *pThread = AfxBeginThread(ThreadProc1, (LPVOID)111, THREAD_PRIORITY_LOWEST);
//SetThreadPriority(pThread->m_hThread, THREAD_PRIORITY_LOWEST);


pThread = AfxBeginThread(ThreadProc2, (LPVOID)789, THREAD_PRIORITY_HIGHEST);
//SetThreadPriority(pThread->m_hThread, THREAD_PRIORITY_HIGHEST);
}
===================================================
③、线程的退出与终结:
1、最好的方式:让线程函数主动退出,或者 return;
可以保证线程函数里面对象的析构函数被调用,以及线程申请的相关空间被释放;


2、线程自己主动退出,可以调用 ExitThread(MFC中使用 AfxEndThread);
线程函数里面对象的析构函数不会被调用,线程申请的相关空间被释放;
所以,在C语言里面可以使用该函数退出线程,但在C++里面不建议,因为C++里面有类!


3、其他程序强行结束目标线程:可以调用 TerminateThread
此函数非常危险,被结束的线程不会得到任何通知,线程申请的相关空间也不会被释放!
所以,离他远点!


4、线程退出码的获取:GetExitCodeThread
前提:句柄有效,不被关闭!
===================================================

你可能感兴趣的:(线程相关)