는 나는 다음과 같은 정의 내 수업 시간에 뮤텍스를 가지고있다. 하지만 시간 값 (다음과 같이)을 사용하면 즉시 -1 값이 반환됩니다. 이 뮤텍스가 다른 곳에서는 획득되지 않았으므로 -1을 반환해서는 안됩니다.ACE_Mutex :: 취득 문제
m_specsMutex.acquire(ACE_OS::gettimeofday() + ACE_Time_Value(30))
뭐가 잘못 되었나요?
는 나는 다음과 같은 정의 내 수업 시간에 뮤텍스를 가지고있다. 하지만 시간 값 (다음과 같이)을 사용하면 즉시 -1 값이 반환됩니다. 이 뮤텍스가 다른 곳에서는 획득되지 않았으므로 -1을 반환해서는 안됩니다.ACE_Mutex :: 취득 문제
m_specsMutex.acquire(ACE_OS::gettimeofday() + ACE_Time_Value(30))
뭐가 잘못 되었나요?
ACE_Mutex에 대한 doxygen 문서를 살펴본 결과 코드가 어떻게 컴파일 될지 이해하지 못합니다. 타임 아웃 값 (tv)은 참조 또는 포인터에 의해 전달되므로 acquire()는 뮤텍스가 획득 된 절대 시간을 업데이트 할 수 있습니다. 표현식을 전달할 수 없습니다. 이렇게 해보십시오 :
ACE_Time_Value time = ACE_OS::gettimeofday() + ACE_Time_Value(30);
m_specsMutex.acquire(&time);
나는 이미 그것을 시도했지만 두 가지 방법으로 컴파일하고 잘 작동한다. 나는 VS2008을 사용하고 있습니다. –
라이브러리를 도랑. CreateMutex, WaitForSingleObject, ReleaseMutex는 Windows에서이 작업을 완료합니다. –
@nobugz, 감사합니다. 그것의 유일한 방법 :) –
나는 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_
(가 etime이 또는 뭔가 다른)? –
@ Samuel : errno를 언급 해 주셔서 감사합니다. errno는 40이고 ACE_OS :: strerror (errno)는 "구현되지 않은 함수"를 반환합니다. 이 경우 무엇을 사용해야합니까? –