Erstellen einer Message Queue



  • Hallo Leute,

    ich habe nun folgendes Problem:
    Ich habe mir einen Thread erstellt:
    hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)handle_error, 0, 0,
    &threadId);
    Nun will ich mit dem handle_error kommunizieren.
    Dabei habe ich mir nun folgendes überlegt, ich baue mir eine einfache
    MessageQueue auf.
    Wie realisiert man so eine Message-Queue?
    Das Zeil ist natürlich mit dem error_handle und der main routine zu
    kommunizieren.

    System:
    Windows XP mit mingw/g++

    Grüße und Danke für eure Hilfe
    Tentone



  • du vergaßt uns aus dem regnerischen bayern zu grüßen



  • sothis_ schrieb:

    du vergaßt uns aus dem regnerischen bayern zu grüßen

    😃
    Stimmt, aber mittlerweile scheint die Sonne und es windet



  • Wie realisiert man so eine Message-Queue?

    Queue (z.B. std::list oder std::deque) + Mutex (z.B. boost::mutex) + Condition-Variable (z.B. std::condition) + etwas eigener Code ==> thread-safe blocking message-queue.

    Grob:

    void msg_queue::insert(msg const& m)
    {
        scoped_lock l(m_mutex);
        while (is_queue_full())
            m_cond_not_full.wait(l);
    
        m_queue.push_front(m);
    
        m_cond_not_empty.signal_all();
    }
    
    void msg_queue::get_message(msg& m)
    {
        scoped_lock l(m_mutex);
        while (is_queue_empty())
            m_cond_not_empty.wait(l);
    
        m = m_queue.back();
        m_queue.pop_back();
    
        m_cond_not_full.signal_all();
    }
    

    Oder aber du nimmst eine fertige Implementierung (frag mich nicht nach einer Empfehlung, kann ich keine bieten). Oder natürlich gleich eine ganz normale Windows Message Queue. Dazu macht man üblicherweise ein unsichtbares Fenster auf, und dann halt einfach PostMessage/GetMessage/PeekMessage.


Anmelden zum Antworten