두 개의 이벤트 처리기가 처리하고 처리하는 두 개의 이벤트가 있습니다. EventHandler2
에서 boost::thread
이 시작됩니다. EventHandler2에서 응용 프로그램은 join()
을 호출하여이 스레드가 완료되기를 기다리고 있습니다.스레드가 시작된 경우에만 스레드가 참여할 때까지 대기하는 방법
join()
에 대한 응용 프로그램의 원인이 된 다른 이벤트가 발생하기 전에 스레드를 시작한 이벤트가 항상 먼저 실행 되었기 때문에 빠른 컴퓨터에서 제대로 작동합니다. 그러나 오래된 컴퓨터에서는 이벤트가 다른 순서로 실행됩니다 (EventHandler2
이 호출되기 전에 수행해야 할 과중한 작업이 있기 때문에). join()
은 즉시 (스레드가 시작되지 않았습니다. 두 번째 이벤트가 시작되지 않았기 때문에) EventHandler1
이 먼저 호출되고 대기하지 않습니다. 내가 여기서 할 수있는 최선의 방법은 무엇인가? 뮤텍스를 잠그고 나서 join()
으로 전화하기 전에 기다려야합니까? 이 방법은 스레드가 join()
호출되기 전에 시작되었는지 확인합니다. 이 경우 사용할 가장 좋은 패턴은 무엇입니까? 감사합니다.
http://stackoverflow.com/questions/9094422/how-to-check-if-a-stdthread-is-still-running, 긴 이야기 짧게 : bool을 사용하십시오. – lorro
'std :: 원자 번호'이 (가) 찾고있는 것일 수 있습니다 ... –