# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 11:06 by
一個線程在調用uninit,另一個線程可能在調用log,這樣就有問題,假若 m_bEndThread = true,ThreadProc退出了,這時log對信號量遞增計數,有泄露。當然,日志結束一般也是進程結束的時候,無所謂了
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 13:44 by
@true
感謝, uninit 修改為這樣
bool uninit()
{
m_bEndThread = true ;
DWORD dwRet = ::WaitForSingleObject(m_hThread, INFINITE);
if ( dwRet == WAIT_FAILED )
return false ;
::ReleaseSemaphore(m_hSemaphore, 1 , NULL);
::CloseHandle(m_hSemaphore);
m_hSemaphore = NULL;
::DeleteCriticalSection( & m_CriticalSection);
return true ;
}
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 13:44 by
@abettor
log4c 感覺太龐大了,我只需要實現單條線程去寫LOG信息,如此而已!
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 16:00 by
@sleepwom
修改后的還是不對的:if ( dwRet == WAIT_FAILED )
return false ; 中途返回的話,m_CriticalSection就泄漏了。
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 22:18 by
@Matrixcoding
樓上的,我還真的不知道怎么改
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-16 22:19 by
critical section在構造函數申請,析構函數釋放。
創建log的線程負責釋放log
其他線程負責使用log
log自己操作critical section
永不泄漏
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-18 13:41 by
寫一個完善的LOG類是很困難的,我覺得有可以使用和一些日志庫同樣的接口,可能實現時只是輸出到cout,而后如有必要可方便地引入龐大的日志庫(如:log4cxx),用日志庫其實一點都不麻煩,只是多了一點初始化的工作,真正記日志的接口是很簡單的,發行時帶上1MB的運行時庫通常不是大問題,重要的是你不必擔心日志相關的代碼會有問題。
# re: 實現了一個寫LOG類 回復 更多評論
2009-01-19 10:16 by
@sleepwom
簡單點,return false之前把m_CriticalSection也釋放了。復雜點的就包裝一個良好界面的鎖機制。