在窗口A中 有一线程函数
这个线程函数
while(1)
{
//向窗口B发送消息
}当窗口B关闭时,怎么关闭这个线程?

解决方案 »

  1.   

    把while(1) 改成while(::IsWindow(hWnd))不要总用死循环,你这里明明有个合理的退出条件,为什么要while(1)
      

  2.   

    方法很多,楼上的可行。B关闭时,将m_bExit置TURE;
    while(!B.m_bExit)
    {
    ....
    }
      

  3.   

    给你一种比较安全的方法吧:
    把你上面的代码改成// 当工作线程应该关闭的时候的标志
    volatile BOOL g_fQuit = FALSE;  // volatile 关键字不使用寄存器里的值
    ///////////////////////////////////////////////////////////////////////////////
    DWORD WINAPI WorkerThread(PVOID pvParam) 
    {
    // 工作线程是否应该关闭?
    while (!g_fQuit) 
            {
              // ...
             }
    }然后在B窗口的关闭事件中写一句InterlockedExchangePointer((PVOID*) &g_fQuit, (PVOID) TRUE);上面这个函数就是把这个全局变量变为TRUE的意思,只不过它是原子方式运行的,比较安全
      

  4.   

    额 我的程序时这样的
    while(1)
    {
    判断条件
    PostMessage 创建窗口B
    向B发送消息 
    }
    所以不好用2楼的方法啊  
      

  5.   

    如果B窗口的存在是一个必要条件,看不出任何问题可以不把1换成IsWindow(hWindB)的