關於 thrdcore.cpp 內存泄漏問題

問題現象描述以下:函數

Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {271} client block at 0x0056B5F8, subtype c0, 68 bytes long.ui

 

緣由分析:spa

  關閉程序,執行到析構函數時,在析構函數末尾會強制關閉子線程函數。因爲,子線程是強制關閉的, 因此子線程未執行完畢就被關閉了,.net

所以,子線程所用到的資源未能及時釋放,所以引發了內存泄露。線程

 

解決思路:blog

  既然是沒有正常結束線程,那麼咱們就讓他自動結束應該就ok了,下面提供一種參考方案。事件

第一步: 創建全局變量 ip

  bool g_bThread = TRUE;      // 子線程循環條件內存

  HANDLE g_hEven t = NULL;    // Event事件 資源

第二步: 在建立線程前,建立一個無信號的event事件 

  g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); 

第三步: 在子線程循環結束後,設置EVENT事件 

  while (  g_bThread )

  {

   // ...

  }

  SetEvent(g_hEvent); 

第四步: 在主程序的析構函數中,修改 g_bThread並調用WaitForSingleObject(g_hEvent,INFINITE); 等待事件狀態改變,而不是直接關閉程序。若事件狀態改變 ,則意味 子線程函數跳出循環,能夠正常退出。 

  g_bThread = FALSE;

  WaitForSingleObject(g_hEvent, INFINITE);

  CloseHandle(g_hEvent);

 

備註:本文參考來源於http://blog.csdn.net/shuilan0066/article/details/6900986

相關文章
相關標籤/搜索