2010-01-01 6 views
1

는 나는 다음과 같은 정의 내 수업 시간에 뮤텍스를 가지고있다. 하지만 시간 값 (다음과 같이)을 사용하면 즉시 -1 값이 반환됩니다. 이 뮤텍스가 다른 곳에서는 획득되지 않았으므로 -1을 반환해서는 안됩니다.ACE_Mutex :: 취득 문제

m_specsMutex.acquire(ACE_OS::gettimeofday() + ACE_Time_Value(30)) 

뭐가 잘못 되었나요?

+0

(가 etime이 또는 뭔가 다른)? –

+0

@ Samuel : errno를 언급 해 주셔서 감사합니다. errno는 40이고 ACE_OS :: strerror (errno)는 "구현되지 않은 함수"를 반환합니다. 이 경우 무엇을 사용해야합니까? –

답변

1

ACE_Mutex에 대한 doxygen 문서를 살펴본 결과 코드가 어떻게 컴파일 될지 이해하지 못합니다. 타임 아웃 값 (tv)은 참조 또는 포인터에 의해 전달되므로 acquire()는 뮤텍스가 획득 된 절대 시간을 업데이트 할 수 있습니다. 표현식을 전달할 수 없습니다. 이렇게 해보십시오 :

ACE_Time_Value time = ACE_OS::gettimeofday() + ACE_Time_Value(30); 
m_specsMutex.acquire(&time); 
+0

나는 이미 그것을 시도했지만 두 가지 방법으로 컴파일하고 잘 작동한다. 나는 VS2008을 사용하고 있습니다. –

+0

라이브러리를 도랑. CreateMutex, WaitForSingleObject, ReleaseMutex는 Windows에서이 작업을 완료합니다. –

+0

@nobugz, 감사합니다. 그것의 유일한 방법 :) –

0

나는 win32에서 같은 문제가있었습니다. 나는 해결책을 찾기 위해 많은 시간을 필요로하고 당신과 그것을 공유하고 싶다.

ACE_Mutex (= ACE_Thread_Mutex)는 win32 환경에서 CRITICAL_SECTION을 사용하여 구현됩니다. 이것은 매우 빠르지 만 시간 초과로 대기 할 가능성은 없습니다.

마지막으로 ACE_Mutex 대신 ACE_Process_Mutex를 사용했습니다. 이것은 Win32 환경을위한 HANDLE 기반 뮤텍스로 구현되며 타임 아웃과 함께 사용할 수 있습니다.

자세한 내용은 여기에서 찾을 수 있습니다 다음은 취득하기 위해 호출 실패 후 할런지 무엇 http://flylib.com/books/en/3.19.1.83/1/#_/term_

관련 문제