เรียงลำดับสัญญาณ/สล็อต QObjects โดยใช้หน่วยความจำที่ใช้ร่วมกัน

ฉันมี Qt แอปสองแอปที่แชร์ส่วนหน่วยความจำ

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการที่จะส่งสัญญาณจาก App2 และทริกเกอร์ช่องจาก App1 ก่อนอื่น ฉันต้องใช้ QObject::connect() เพื่อเชื่อมโยงสัญญาณ App2 กับช่อง App1

มีวิธีที่ดีในการเชื่อมต่อกลไกสัญญาณ/สล็อตการประมวลผล Qt สองแบบที่แตกต่างกันหรือไม่ ฉันบังเอิญไปพบกับไลบรารี qt-remote-signals เพื่อส่งสัญญาณระยะไกล ซึ่งใช้ QDataStream เพื่อทำให้วัตถุเป็นอนุกรม QSharedMemory ใช้คลาสเดียวกัน

หรือฉันควรลืมเกี่ยวกับการเชื่อมต่อสิ่งใดๆ แล้วแค่จำลองพฤติกรรมของสัญญาณ/สล็อต?

  1. เขียนในส่วนของหน่วยความจำจาก App2
  2. อ่านส่วนเมื่อใดก็ตามที่มีการเปลี่ยนแปลงจาก App1 (จะรู้ได้อย่างไรว่าอัปเดตเมื่อใด)
  3. ส่งสัญญาณที่กำหนดเองจาก App1
  4. ทริกเกอร์ช่องจาก App1

มันฟังดูสมจริงมั้ย? ฉันยังใหม่กับหน่วยความจำที่แชร์


person Grégoire Borel    schedule 11.07.2017    source แหล่งที่มา


คำตอบ (1)


เท่าที่ฉันรู้ คุณไม่สามารถเชื่อมต่อสัญญาณ/สล็อตระหว่างกระบวนการได้ นอกจากนี้คุณยังไม่สามารถรู้ 'ตามธรรมชาติ' ได้หากกระบวนการอื่นเปลี่ยน QSharedMemory

ฉันคิดว่าคุณจะต้องจำลองมันตามที่คุณพูด

  1. เขียนในส่วนของหน่วยความจำจาก App2
  2. แอป 1 สามารถตรวจสอบเซ็กเมนต์เป็นระยะๆ เพื่อให้ทราบถึงการเปลี่ยนแปลงจากแอป 2 เมื่อการเปลี่ยนแปลงเสร็จสิ้น คุณจะทริกเกอร์ช่องโดยตรง (คุณไม่จำเป็นต้องมีสัญญาณจริงๆ)

หากคุณต้องการการตอบสนองทันที (โดยไม่ทำให้เวลาในการตรวจสอบแอป 1 น้อยเกินไป) จาก App1 คุณสามารถทำให้พวกเขาสื่อสารโดยใช้ QLocalSocket/Server หรือ D-Bus แต่ในกรณีนั้น คุณสามารถเข้าร่วมกับพวกเขาและจัดการการสื่อสารทั้งหมดได้ QSharedMemory ไม่จำเป็น

person Sommerwild    schedule 12.07.2017
comment
ฟังดูเป็นบทสรุปที่ดีของสิ่งที่ฉันได้พบ ฉันจะขุดโปรโตคอล D-Bus - person Grégoire Borel; 12.07.2017