ManualResetEvent에 해당하는 부스트가 있다면 궁금합니다. 기본적으로, 나는 크로스 플랫폼 구현을 원합니다 ... 아니면 Boost :: thread를 사용하여 ManualResetEvent의 기능을 모방 할 수있게 도와 줄 수 있습니까? 고마워요ManualResetEvent의 부스트?
답변
뮤텍스와 조건 변수가있을 때 수동 재설정 이벤트를 작성하는 것은 꽤 쉽습니다.
리셋 이벤트의 신호 여부를 나타내는 필드가 필요합니다. 필드에 대한 액세스는 뮤텍스에 의해 보호되어야합니다. 여기에는 이벤트 설정/재설정과 신호 여부를 확인하는 것이 포함됩니다.
이벤트를 기다리는 중, 현재 신호가 보내지지 않으면 신호가있을 때까지 조건 변수를 기다리고 싶을 것입니다. 마지막으로, 이벤트를 설정하는 코드에서 조건 변수를 통보하여 이벤트를 기다리는 모든 사람을 깨우는 것이 좋습니다.
class manual_reset_event
{
public:
manual_reset_event(bool signaled = false)
: signaled_(signaled)
{
}
void set()
{
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = true;
}
// Notify all because until the event is manually
// reset, all waiters should be able to see event signalling
cv_.notify_all();
}
void unset()
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = false;
}
void wait()
{
boost::lock_guard<boost::mutex> lock(m_);
while (!signaled_)
{
cv_.wait(lock);
}
}
private:
boost::mutex m_;
boost::condition_variable cv_;
bool signaled_;
};
이 기능을 사용하려면'boost :: condition_variable_any'를 사용해야 할 수도 있습니다. 참조 : http://stackoverflow.com/questions/8758353/whats-the-difference-between-stdcondition-variable-and-stdcondition-variable – Nick
또한 condition_variable_any :: wait 메서드는 뮤텍스를 매개 변수로 지정해야하며, 자물쇠 가드가 아니야. – Oliver
흠, 내가 얻을 : 오류 C2664 '무효 향상을 :: condition_variable :: 대기가 (부스트 : unique_lock
개체에 대해 여러 스레드가 대기 할 수 있도록하려면 ManualResetEvent
이 존재하고 개체가 신호를 받으면 한 번에 하나의 스레드가 깨어날 수 있습니다. "수동 재설정"부분은 스레드가 깨어 난 후에 시스템이 이벤트를 자동으로 재설정하지 않는다는 사실에서 비롯됩니다. 당신은 대신 그렇게합니다.
이 condition variables 매우 유사 소리 :
일반적인 사용 패턴은 하나 개의 스레드가
condition_variable
또는condition_variable_any
의 인스턴스에wait
를 호출 한 다음 뮤텍스를 잠그고 있다는 것입니다. 쓰레드가 대기 상태에서 깨어 났을 때, 적절한 조건이 참인지를 검사하고 만약 그렇다면 계속 진행한다. 조건이 참이 아니면 스레드는wait
을 다시 호출하여 대기를 재개합니다.
필자는 필자가 쓰지 않을 때만 읽을 수있는 독자 스레드가있는 반면 기본적으로 항상 쓰고 차단되지 않아야하는 작성자 스레드를 가지고있다. 감사합니다 – Polaris878
나는 당신의 디자인이 이치에 맞다고 말할 것입니다. –
- 1. 부스트 : 부스트 용 MacOSX 바이너리
- 2. 부스트 : : 기능 및 부스트 : : 람다 게시물에 다시
- 3. 부스트 :: Multiindex 대 문자열 인덱스 부스트 :: unordered_map
- 4. 부스트 라이브러리에 문제가 있지만 부스트 라이브러리가 존재합니다.
- 5. 부스트 :: 공장 만들기 부스트 :: enable_shared_from_this 클래스
- 6. 부스트 :: 파이썬과 부스트 :: 스레드에 관한 문제
- 7. 부스트 정신
- 8. 부스트 :: 임의
- 9. 부스트 과정
- 10. 부스트 :: 신호는
- 11. C++ : 부스트 :
- 12. 부스트 예외
- 13. 부스트 propertytree
- 14. 부스트 :: 기능
- 15. 부스트 바인드 내부 부스트 packaged_task. 왜 asio는 CompletionHandler가 아니라고 생각합니까?
- 16. 부스트 직렬화 문제
- 17. 부스트 adjacency_list 도움이 필요합니다.
- 18. 부스트 .MPI 문제
- 19. 부스트 스레드 취소 중
- 20. 부스트 파일 시스템 반복자
- 21. 부스트 "서명"질문
- 22. 부스트 IPC가 좋습니까?
- 23. 부스트 뮤텍스 위해
- 24. C++ 작성 매트릭스 부스트
- 25. 부스트 이진 직렬화 문제
- 26. 부스트 스레드 누설 C++
- 27. 부스트 부분 사용하기
- 28. 부스트 doxygen 문서
- 29. 부스트 multi_array 반복
- 30. 부스트 스피릿에 대한 조언
어떤 이벤트 함수를 에뮬레이트 하시겠습니까? – curiousguy