窗口怎么在关闭时结束其创建的所有线程

窗口如何在关闭时结束其创建的所有线程
一个简单的想法是每次创建线程就把handle记录下来,窗口关闭时统一结束,但可能某些线程提前结束,则窗口关闭时再次结束这种不确定handle,可能造成无法预料的后果(此handle可能被分配给其它地方创建的新线程)。求解决办法ing~~~

------解决方案--------------------
每个线程对应2个CEvent cEnd,cOver;
在线程的循环体内部
if(::WaitForSingleObject(cEnd,0)==WAIT_OBJECT_0)//等待
{
cOver.SetEvent();
return 0;
}

希望线程退出的时候
cEnd.SetEvent();
WaitForSingleObject(cOver, INFINITE);
------解决方案--------------------
探讨

关键是怎么知道记录下来的线程handle,其原先的线程是否已退出,会不会后来其它地方又建立一个线程,与其句柄相同?

------解决方案--------------------
声明一个全局变量long g_lThreadNum;
在进入线程时:InterlockedIncrement(&g_lThreadNum);//加一操作
在退出线程时:InterlockedDecrement(&g_lThreadNum);//原子操作,减一
在程序退出时:
while(true)
{
if(g_lThreadNum==0)
break;

sleep(2000);
}
------解决方案--------------------
保存创建的句柄到数组中,
然后线程循环中采用waitsinggleobject等待主线程退出的exitevent事件,如果可信,就退出线程。
主线程采用waitformuliteobject等待那个保存到数据中的线程句柄。