शुभ दिन लोग,64 बिट और 32 बिट प्रक्रिया ख़बर बढ़ावा :: message_queue
मैं वर्तमान में एक 64 बिट प्रक्रिया है और एक 32 बिट प्रक्रिया के बीच डेटा पास के लिए एक रास्ता निकालने की कोशिश कर रहा हूँ। चूंकि यह एक वास्तविक समय का एप्लिकेशन है और दोनों एक ही कंप्यूटर पर चल रहे हैं, मैं साझा स्मृति (श्म) का उपयोग करना कठिन हूं।
जब मैं shm का उपयोग कर कुछ तुल्यकालन तंत्र के लिए देख रहा था, मैं बढ़ावा पर महसूस किया :: 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;
}
इस कोड को पूरी तरह से काम करता है, तो दो प्रक्रिया 64 बिट या 32 बिट कर रहे हैं:
मेरे कोड मूल रूप से पीछा कर रहा है। लेकिन काम नहीं करता है अगर दोनों प्रक्रिया एक जैसी नहीं हैं। (बढ़ावा/इंटरप्रोसेस/आईपीसी/message_queue.hpp)
बढ़ावा में गहरी खोज रहे हैं (1.50.0) कोड आप message_queue_t में निम्न पंक्ति :: do_receive देखेंगे:
scoped_lock lock(p_hdr->m_mutex);
किसी कारण से, में विषम प्रक्रियाओं के साथ काम करते समय म्यूटेक्स लॉक लगते हैं। मेरा जंगली अनुमान यह होगा कि म्यूटेक्स ऑफसेट हो गया है और इसलिए इसका मान दूषित है लेकिन मुझे पूरा यकीन नहीं है।
क्या मैं कुछ ऐसा करने की कोशिश कर रहा हूं जो कि समर्थित नहीं है?
कोई भी मदद या सलाह की सराहना की जाएगी।
यह जंगली अनुमान नहीं था, यह सटीक है। उन्होंने म्यूटेक्स को साझा मेमोरी में रखा और यह उन सदस्यों द्वारा किया गया है जिनके आकार को गठबंधन पर निर्भर करता है। आप यह काम नहीं कर सकते। –