좋은 하루 일하는 사람들,64bit 및 32bit 프로세스 간 통신 boost :: message_queue
현재 64 비트 프로세스와 32 비트 프로세스간에 데이터를 전달하는 방법을 생각하고 있습니다. 실시간 응용 프로그램이기 때문에 둘 다 같은 컴퓨터에서 실행되므로 공유 메모리 (shm)를 사용하기가 어렵습니다.
shm을 사용하여 동기화 메커니즘을 찾고 있는데 boost :: message_queue에서 느꼈습니다. 그러나 그것은 작동하지 않습니다.
보낸 사람 부분이 개 프로세스가 64 비트 또는 32 비트 경우
message_queue mq(open_only, "message_queue");
for (uint8_t i = 0; i < 100; ++i)
{
uint8_t v;
size_t rsize;
unsigned int rpriority;
mq.receive(&v, sizeof(v), rsize, rpriority);
std::cout << "v=" << (int) v << ", esize=" << sizeof(uint8_t) << ", rsize=" << rsize << ", rpriority=" << rpriority << std::endl;
}
이 코드가 완벽하게 작동
message_queue::remove("message_queue");
message_queue mq(create_only, "message_queue", 100, sizeof(uint8_t));
for (uint8_t i = 0; i < 100; ++i)
{
mq.send(&i, sizeof(uint8_t), 0);
}
수신기 부분 :
내 코드는 기본적으로 다음과 같다. 하지만 두 프로세스가 같지 않으면 작동하지 않습니다. 후원에 깊은 찾고
이(1.50.0) 코드는 다음 message_queue_t 라인 :: do_receive를 볼 수 있습니다 (부스트/간/IPC/message_queue.hpp) : 어떤 이유
scoped_lock lock(p_hdr->m_mutex);
의에서 mutex는 이기종 프로세스로 작업 할 때 잠긴 것처럼 보입니다. 내 생각에 뮤텍스는 상쇄되어 값이 손상되었지만 확실하지는 않습니다.
단순히 지원되지 않는 작업을 수행하려고합니까?
도움이나 조언을 주시면 감사하겠습니다.
이것은 정확하지 않습니다. 그들은 뮤텍스를 공유 메모리에 넣고 크기가 비트 수에 달려있는 멤버를 선행합니다. 이 일을 할 수는 없습니다. –