이 경우 timed_receive()를 호출하면 시간이 초과 될 것이지만 대신 뮤텍스를 잠그려고 시도하는 것으로 생각됩니다.boost :: interprocess :: timed_receive()는 프로세스가 멈추는 경우를 반환하지 않습니다.
데이터 수신을 시도하기 전에 내 전화에서 호출 할 수있는 기능이 있습니까? 전송 프로세스가 중지되었거나 중단되었는지 알려줍니다.
이 경우 timed_receive()를 호출하면 시간이 초과 될 것이지만 대신 뮤텍스를 잠그려고 시도하는 것으로 생각됩니다.boost :: interprocess :: timed_receive()는 프로세스가 멈추는 경우를 반환하지 않습니다.
데이터 수신을 시도하기 전에 내 전화에서 호출 할 수있는 기능이 있습니까? 전송 프로세스가 중지되었거나 중단되었는지 알려줍니다.
상대방, 사망자, 정지, 부분적으로 잠겨 있는지 (예 : 스레드 중 하나가 무한 루프에 있음), 어포 섬을 재생 중인지 아니면 적대적인지를 알 수있는 일반적인 방법이 없습니다. 상대방이 협동 조합 인 경우 하트 비트와 통신하여 응답 할 수 있는지 여부를 결정할 수 있습니다.
프로그램이 "붙어"는 뮤텍스를 잠그면 (당신에게 그런 경우가 있다고? 확실하다)이라는 사실이를 표시 할 수 있습니다,
timed_receive 아웃, 번 성공, 또는 예상대로 발생합니다 :
bool timed_receive(void * buffer, std::size_t buffer_size, std::size_t & recvd_size, unsigned int & priority, const boost::posix_time::ptime & abs_time);
는 메시지 큐에서 메시지를 수신합니다. 메시지는 버퍼 "buffer"에 저장되며 크기는 "buffer_size"입니다. 수신 된 메시지 의 크기는 "recvd_size"이고 우선 순위는 "priority"입니다. 메시지 대기열이 이면 빈 시간에 "abs_time"에 도달 할 때까지 수신기가 재 시도합니다. 메시지가 성공적으로 전송 된 경우 을 반환합니다. 시간 초과에 도달하면 false를 반환합니다. 오류가 발생하면 interprocess_error를 발생시킵니다.
타임 아웃 값을 전달해야합니다.
그래, 내 부분에 오해가있을 수 있습니다. 디버거의 보낸 사람을 일시 중지하여 시간 제한을 테스트했습니다. 나는 리시버가 타임 아웃하여 빠져 나갈 것으로 예상했다. 하지만 공유 뮤텍스에 집착하는 것은 실제로 의미가 있습니다. 발신자는 아직 살아 있지만 응답하지 않습니다. 대신 발신자를 죽이면 예상대로 시간 초과가 발생합니다. –
@ DavidM.Cotter 듣기 좋습니다! – mockinterface