2012-12-18 4 views
1

나는 두 개의 스레드간에 공유되는 중요한 부분이있다.글로벌 변수 초기화 및 마무리

TCriticalSection  *lock_measDataBuff; 

어디 new 연산자를 사용하여 잠금 변수를 초기화 할 수있는 최고의 장소입니다 : 델파이 스타일 클래스는 new 연산자를 사용하여 구성해야 지금 때문에 다음과 같이 내가 선언 위에 수정 한? 연산자 삭제를 사용하여 전역 변수를 마무리하는 가장 좋은 장소는 어디입니까? 그것은 WinMain 방식이어야 하는가? 잠금 변수에 액세스하는 클래스 중 하나의 생성자? 또는 코드의 다른 장소?

답변

2

내가 std::auto_ptr을 사용 종료 후 것 또는 boost::unique_ptr을 모두 처리 할 수 ​​있습니다. 예 :

#include <memory> 

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

당신이 전역 변수를 만들 때, 당신은 당신이 주요 것 스레드를 생성하기 전에 초기화해야하며, 메모리를 해제 할 수있는 가장 좋은 장소는 스레드가

+0

제한된 시간 동안 요청에 따라 작성되는 작업자 스레드입니다. 불행히도 내 스레드 특성 "FreeOnTerminate"집합이 있습니다. 내가 "Terminate"메서드를 호출 한 후에는 더 이상 관심이 없습니다. 당신의 제안은 쓰레드에서 "WaitFor"를 호출하고 "delete"를 호출하는 것과 같이 코드를 더 작게 변경해야합니다. 그러나이 문제를 해결하는 방법 중 하나입니다. 나는 이것을 고려할 것이다. C++ 빌더가 델파이의 "초기화"및 "파이널 라이즈"블록과 유사한 비유를 가지고 있다고 생각했습니다. 이것은 나를 위해 더 간단 할 것이다. – truthseeker