2012-08-17 2 views
0

나는 멀티 스레딩을위한 잠금에 익숙해 져있다.모니터에서 obj가 있어야하는 :: ::

Monitor::Enter(obj); 

try 
{ 
    ///do work 
} 

finally 
{ 
    Monitor::Exit(obj); 
} 

무엇을 obj에 선언해야합니까? 나는, 클래스 로케이터의 생성자에서

Locator() 
{ 
    System::Object^ obj = gcnew System::Object(); 
} 

그것을 선언하고 클래스

private: 
    System::Object^ obj; 

의 private 변수에 obj를 선언하지만

Value cannot be null. 
말을 Monitor::Enter(obj) 후 나에게 오류를주고 있어요

팁을 주시면 감사하겠습니다.

답변

0

생성자가 있어야한다 :

Locator() 
: obj(gcnew System::Object()) 
{ } 

당신이 일찍 무덤이 바로 그것으로 추적 것 오브젝트를 복용 즉시 범위를 벗어나 새로운 지역 변수를 만드는 일을하고 있습니다. 당신이하고자하는 일은 대신 멤버 변수를 초기화하는 것입니다. 귀하의 경우, 구성원 변수가 null으로 계속 남아있어서 관찰 한 오류가 발생합니다.

(I가 잘 CLI를 알 수 없기 때문에, 그것은,이 경우. 당신이 initalizer 목록 생성자에서 추적 참조를 초기화 할 수 없습니다 있다는 것을 일이

Locator() { obj = gcnew System::Object(); } 
를 :)처럼 작성할 수 있습니다
관련 문제