155 執行緒的相關操作

zyddst1314發表於2020-12-17

1.執行緒的掛起與恢復
SuspendThread、ResumeThread
執行緒的掛起和恢復是有次數的,掛起和恢復的次數是一一對應的
2.執行緒的優先順序
①AfxBeginThread建立執行緒的時候直接指定
②CreateThread需要建立之後指定。獲取:GetThreadPriority 設定:SetThreadPriority

UINT _cdecl ThreadProc1(LPVOID lpParameter)
{
	CStdioFile mFile;
	mFile.Open(_T("F:\\456.txt"), CFile::modeCreate | CFile::modeReadWrite);

	int tipMsg = (int)lpParameter;
	CString str;
	while (true)
	{
		str.Format(_T("%d\n"), tipMsg);
		mFile.WriteString(str);
	}
	mFile.Close();

	return 0;
}
UINT _cdecl ThreadProc2(LPVOID lpParameter)
{
	CStdioFile mFile;
	mFile.Open(_T("F:\\789.txt"), CFile::modeCreate | CFile::modeReadWrite);

	int tipMsg = (int)lpParameter;
	CString str;
	while (true)
	{
		str.Format(_T("%d\n"), tipMsg);
		mFile.WriteString(str);
	}
	mFile.Close();

	return 0;
}

HANDLE hThread = NULL;
void CThreadTestDlg::OnBnClickedButton1()
{
	CWinThread * pThread = AfxBeginThread(ThreadProc1,(LPVOID)111,THREAD_PRIORITY_LOWEST);
	CWinThread * pThread1 = AfxBeginThread(ThreadProc2, (LPVOID)789, THREAD_PRIORITY_HIGHEST);
	// TODO: 在此新增控制元件通知處理程式程式碼
	hThread = pThread->m_hThread;
}

3.執行緒的退出與終結
①最好的方式:讓執行緒函式主動退出,或者return
可以保證執行緒函式裡面物件的解構函式被呼叫,執行緒申請的相關空間被釋放
②執行緒主動退出,可以呼叫ExitThread(MFC中使用AfxEndThread);
執行緒函式裡面物件的解構函式不會被呼叫,執行緒申請的相關空間被釋放;
③其他程式強行結束目標執行緒:可以呼叫TerminateThread
此函式非常危險,要原理
④執行緒退出碼的獲取:GetExitCodeThread
前提:控制程式碼有效,不被關閉

相關文章