在VC的窗口上有一个Button,每次点击Button会执行下面语句:HANDLE h_thread1,h_thread2;
BOOL exit1 = FALSE;
Button1_Click()
{
  h_thread1=CreateThread(NULL,0, Thread1, NULL,0,NULL);
}
Button2_Click()
{
    exit1 = TRUE;
}
static DWORD Thread1(LPVOID pParam)
{
  if(h_thread2)
      closehandle(h_thread2);
  h_thread2=CreateThread(NULL,0,Thread2,NULL,0,0);/*创建第二个线程*/
  while(true)
  {   
      if (exit1)
         break;
      do_some();
   }
}
static DWORD Thread2(LPVOID pParam)
{
   while(true)
   {
      socket accept(); /*这里是一个socket的阻塞*/
   }
}1.每次会先单击Button1,再单击Button2,让Thread1退出,但这样Thread2没有退出,会有什么后果吗?
2. thread1退出了,是不是thread2也会自动的退出?
3. 我在thread1里每次进入,都会先查h_thread2是否存在,如果存在则closeHandle(),这样其它没有真正关闭thread2吧/
在线等待,上面线程在多次点击Button1,Button2后有什么后果可以保证单击Button1后一定要单击Button2才能继续单击Button1. 可以保证是一一对应的。

解决方案 »

  1.   

    不好意思,上面要加一句:
    Button1_Click()

      exit = FALSE;  /*这里要加上 */
      h_thread1=CreateThread(NULL,0, Thread1, NULL,0,NULL);
    }
      

  2.   

    1. 后果就是线程2一直跑在内存中,而且会有越来越多的线程2
    2. 不会,除非你的进程整个结束了
    3. 对,并没有关闭thread2,只是减少了一个内核对象计数如果你给出的是伪代码的话还好,如果是真实代码的话问题就很多了
      

  3.   

    呵呵,不必客气~关于多线程方面,我觉得在windows核心编程里讲得很不错