关于SendMessage的有关问题

关于SendMessage的问题
我在子线程中需要通过回调函数显示一些数据到主窗体上

我是SendMessage投递的自定义消息给主窗体的,这样做试了下都没问题

但是现在有个问题是我如果关闭掉窗口,则会发现子线程在SendMessage后会卡死,应该是主线程OnDestroy后窗口句柄m_hWnd为NULL。。

因此我做了如下处理,

boo g_bQuit = false;
CRITICAL_SECTION g_CritSect;

InitializeCriticalSection(&g_CritSect);和DeleteCriticalSection(&m_CritSect);分别在类构造析构中调用了 

//OnDestroy函数
void CManageSvrDlg::OnDestroy()
{
   
  EnterCriticalSection(&g_CritSect);

  g_bQuit = true; // 标识窗体被销毁
   
  LeaveCriticalSection(&g_CritSect);
   
}

//回调函数如下(子线程中调用)
BOOL CManageSvrDlg::OutPutPipe(const char* csLogInfo, LPVOID lpParameter)
{
  EnterCriticalSection(&g_CritSect);

  if (g_bQuit)
  return false;

  SendMessage(uMsg, wParam,lParam); ////////////////////////

  LeaveCriticalSection(&g_CritSect);
}

运行结果:
  运行后通过输出log发现,如果OnDestroy先被调用程序就运行正常,但是如果是回调函数先被调用,则还是会卡在SendMessage函数。


问题:
  请教下,该如何处理?我把回调函数中的SendMessage改成非阻塞的PostMessage就OK了;
  请教下有没有其它的方法,不是很能理解,我既然OnDestroy中已经加锁了,照理来说如果先执行了回调函数,则窗体不是不应该被销毁掉吗,为啥还是无法SendMessage,还是说我的加锁不应该加在OnDestroy中


------解决方案--------------------
EnterCriticalSection(&g_CritSect);

if (g_bQuit)
return false;

SendMessage(uMsg, wParam,lParam); ////////////////////////

LeaveCriticalSection(&g_CritSect);

这个逻辑是有问题的
g_bQuit为真的话,没有释放临界区,会造成死锁

SendMessage如果某个参数无效(NULL),应该不会阻塞而是直接返回错误吧
------解决方案--------------------
错误的使用方式 却不总是错误.