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);
}
这个是SDK创建和终止线程的方法,起初是想弄明白线程在结束线程时没执行的代码是否执行后才退出线程,结果是没执行的代码不执行就推出了,还有个问题就是T运行了erminateThread(m_hUpThread,0)函数为什么还要运行CloseHandle(m_hUpThread);网上查到的说法“CloseHandle是为线程内核计数器减1.如果不这样做的话,会造成内核资源的泄漏”,《Windows核心编程》这本书里有这方面的内容。以后得买来看看。还发现了2个函数DWORD ResumeThread(HANDLE hThread); DWORD SuspendThread(HANDLE hThread);分别是恢复线程和挂起线程具体解释看MSDN。 3COME文档编辑
//创建线程 创建后立即执行
m_pThread=AfxBeginThread(Thread,this,THREAD_PRIORITY_NORMAL);
//结束线程
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执行循环!0",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d执行循环!1",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
str.Format("第%d执行循环!2",i);
plat->m_list.InsertItem(LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM,i,str,0,0,1,i);
i++;
::Sleep(500);
}
return 0;
}
这个是MFC创建线程的方法
3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/