线程的创建与终止方法和代码
来源:优易学  2011-12-17 12:15:18   【优易学:中国教育考试门户网】   资料下载   IT书店
  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"<<endl;
  ::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。
  //创建线程 创建后立即执行
  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创建线程的方法。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训