皆さん、こんばんは。
私は現在、64 ビット プロセスと 32 ビット プロセスの間でデータを渡す方法を見つけようとしています。これはリアルタイム アプリケーションであり、両方が同じコンピューター上で実行されているため、共有メモリ (shm) を使用するのは困難です。
shm を使用した同期メカニズムを探していたときに、boost::message_queue に気付きました。しかし、それは機能していません。
私のコードは基本的に次のとおりです。
送信部
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);
}
レシーバー部
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;
}
このコードは、2 つのプロセスが 64 ビットまたは 32 ビットの場合に完全に機能します。ただし、2 つのプロセスが同じでない場合は機能しません。
ブースト (1.50.0) コードを詳しく見ると、message_queue_t::do_receive (boost/interprocess/ipc/message_queue.hpp) に次の行が表示されます。
scoped_lock lock(p_hdr->m_mutex);
何らかの理由で、異種プロセスで作業しているときにミューテックスがロックされているようです。私の推測では、ミューテックスがオフセットされているため、その値が破損している可能性がありますが、よくわかりません。
単にサポートされていないことを達成しようとしているのですか?
ヘルプやアドバイスをいただければ幸いです。