DWORD WINAPI Thread(LPVOID lpParam)
{
while(TRUE)
{
printf("Thread1\n");
::Sleep(500);
printf("Thread2\n");
::Sleep(500);
printf("Thread3\n");
::Sleep(500);
printf("Thread4\n");
::Sleep(500);
}
return 0;
}
void main()
{
DWORD dwThread;
HANDLE m_hUpThread=CreateThread(NULL,0,Thread,NULL,0,&dwThread);
::Sleep(5000);
TerminateThread(m_hUpThread,0);
CloseHandle(m_hUpThread);
cout<<"CloseHandle"< ::Sleep(1000*10);
}
這個(gè)是SDK創(chuàng)建和終止線程的方法,起初是想弄明白線程在結(jié)束線程時(shí)沒(méi)執(zhí)行的代碼是否執(zhí)行后才退出線程,結(jié)果是沒(méi)執(zhí)行的代碼不執(zhí)行就推出了,考試,大提示還有個(gè)問(wèn)題就是T運(yùn)行了erminateThread(m_hUpThread,0)函數(shù)為什么還要運(yùn)行CloseHandle(m_hUpThread);網(wǎng)上查到的說(shuō)法“CloseHandle是為線程內(nèi)核計(jì)數(shù)器減1.如果不這樣做的話,會(huì)造成內(nèi)核資源的泄漏”,《Windows核心編程》這本書里有這方面的內(nèi)容。以后得買來(lái)看看。還發(fā)現(xiàn)了2個(gè)函數(shù)DWORD ResumeThread(HANDLE hThread); DWORD SuspendThread(HANDLE hThread);分別是恢復(fù)線程和掛起線程具體解釋看MSDN。
//創(chuàng)建線程 創(chuàng)建后立即執(zhí)行
m_pThread=AfxBeginThread(Thread,this,THREAD_PRIORITY_NORMAL);
//結(jié)束線程
TerminateThread(m_pThread->m_hThread,0);
CloseHandle(m_pThread->m_hThread);
UINT Thread(LPVOID pParam)
{
CTestDlg *plat=(CTestDlg*)pParam;
int i=0;
CString str;
while(1)
{
str.Format("第%d執(zhí)行循環(huán)!0",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d執(zhí)行循環(huán)!1",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d執(zhí)行循環(huán)!2",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
}
return 0;
}
這個(gè)是MFC創(chuàng)建線程的方法
{
while(TRUE)
{
printf("Thread1\n");
::Sleep(500);
printf("Thread2\n");
::Sleep(500);
printf("Thread3\n");
::Sleep(500);
printf("Thread4\n");
::Sleep(500);
}
return 0;
}
void main()
{
DWORD dwThread;
HANDLE m_hUpThread=CreateThread(NULL,0,Thread,NULL,0,&dwThread);
::Sleep(5000);
TerminateThread(m_hUpThread,0);
CloseHandle(m_hUpThread);
cout<<"CloseHandle"<
}
這個(gè)是SDK創(chuàng)建和終止線程的方法,起初是想弄明白線程在結(jié)束線程時(shí)沒(méi)執(zhí)行的代碼是否執(zhí)行后才退出線程,結(jié)果是沒(méi)執(zhí)行的代碼不執(zhí)行就推出了,考試,大提示還有個(gè)問(wèn)題就是T運(yùn)行了erminateThread(m_hUpThread,0)函數(shù)為什么還要運(yùn)行CloseHandle(m_hUpThread);網(wǎng)上查到的說(shuō)法“CloseHandle是為線程內(nèi)核計(jì)數(shù)器減1.如果不這樣做的話,會(huì)造成內(nèi)核資源的泄漏”,《Windows核心編程》這本書里有這方面的內(nèi)容。以后得買來(lái)看看。還發(fā)現(xiàn)了2個(gè)函數(shù)DWORD ResumeThread(HANDLE hThread); DWORD SuspendThread(HANDLE hThread);分別是恢復(fù)線程和掛起線程具體解釋看MSDN。
//創(chuàng)建線程 創(chuàng)建后立即執(zhí)行
m_pThread=AfxBeginThread(Thread,this,THREAD_PRIORITY_NORMAL);
//結(jié)束線程
TerminateThread(m_pThread->m_hThread,0);
CloseHandle(m_pThread->m_hThread);
UINT Thread(LPVOID pParam)
{
CTestDlg *plat=(CTestDlg*)pParam;
int i=0;
CString str;
while(1)
{
str.Format("第%d執(zhí)行循環(huán)!0",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d執(zhí)行循環(huán)!1",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d執(zhí)行循環(huán)!2",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
}
return 0;
}
這個(gè)是MFC創(chuàng)建線程的方法