2012-12-18 39 views
1

我有一個兩個線程之間共享的關鍵部分:全局變量的初始化和終結

TCriticalSection  lock_measDataBuff; 

我宣佈這個變量作爲全球。現在,因爲德爾福樣式類必須使用new運算符來構造,我在上面的聲明作如下修改:

TCriticalSection  *lock_measDataBuff; 

,其中使用new運算符來初始化鎖變量的最佳地點?使用操作符刪除來確定全局變量的最佳位置在哪裏?它應該是WinMain方法嗎?其中一個訪問鎖定變量的類的構造函數?或者在代碼中的其他地方?

回答

2

我會用std::auto_ptrboost::unique_ptr來爲您處理所有這些問題,例如:

#include <memory> 

std::auto_ptr<TCriticalSection> lock_measDataBuff(new TCriticalSection); 
1

當你正在創建一個全局變量,你將需要在創建線程,這將是主前初始化,並釋放內存的最好的地方是後線程結束

+0

這些工作線程是按需要在有限的時間內創建的。不幸的是我的線程有屬性「FreeOnTerminate」設置。在我打電話給「終止」方法後,我不再對它們感興趣。您的建議將需要對代碼進行較小的更改,例如在線程上調用「WaitFor」,然後調用「delete」。但是如何解決這個問題是一種方法。我會考慮這個。我只是想,如果C++ Builder對Delphi中的「初始化」和「最終化」塊有一些類比。這對我來說會更簡單。 – truthseeker