2012-03-28 3 views
1

인스턴트 메시징 응용 프로그램을 개발 중입니다.대기 및 신호 이외의 pthread

이것은 도움이 필요한 상황입니다. 내 코드 fgets()에 사용자가 입력 한 메시지가있는 루틴입니다. 이제 메시지를 소켓 등에 보내는 루틴을 가진 스레드를 깨울 필요가 있습니다. 어떻게해야하는지 잘 모르겠습니다.

뮤텍스를 사용하는 경우 : 내 첫 번째 스레드가 기다리지 않기를 바랍니다. 그러므로 나는 이것을 사용하고 싶지 않다. 마찬가지로 cond_variable을 사용할 수 없습니다.

이 방법을 알려주십시오.

+2

생각하지 마세요. 두 스레드가 (a) 사용자 입력을 기다리고 (b) 네트워크를 통해 전송하는 데 걸리는 시간은 뮤텍스/비용이 부담한다고 생각하는 것과 비교되는 EONS입니다. – Duck

+1

조건 변수를 사용할 수없는 이유는 무엇입니까? 조건 변수는 * 어떤 이벤트가 발생할 때마다 스레드를 깨우기 위해 설계되었으므로 여기서는 매우 유용 할 수 있습니다. –

답변

0

오리의 생각은 너무 과장하지 않는 것이 좋습니다.

또 다른 방법은 파이프를 사용하는 것입니다. 콘솔 처리 스레드가 메시지를 파이프에 쓰고 네트워크 스레드가 파이프에서 차단 읽기를 수행합니다.

결국 네트워크 스레드가 콘솔 파이프와 네트워크 소켓 모두에서 select()를 수행합니다. 그런 다음 전송할 항목이나 네트워크에서 수신 할 항목이있을 때 깨어나서 작업을 수행합니다. 놀라워요!