Anzeige:
Ergebnis 1 bis 11 von 11

Thema: qt Probleme mit dem moc

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    04.11.2012
    Beiträge
    23
    Vielen dank erstmal für die guten Rückmeldungen.

    Es dünkt mich übrigens, dass dein Beispielprogramm kein besonders gelungenes Beispiel für Nebenläufigkeit ist, weil du direkt nach dem Starten jedes einzelnen Threads auf dessen Ende wartest
    Da hast du natürlich vollkommen Recht, dieser Fehler ist erst beim erstellen dieses "Minimalbeispiels" entstanden, da ich dort alle Schleifen möglichst zusammenfassen wollte. Trotzdem danke für den Hinweis.

    Erreicht wird das durch Angabe von Qt:irectConnection als fünften Parameter von conenct().
    Logischerweise obliegt es dann dem Applikationscode die Threadsicherheit zu gewährleisten.
    Das ist quasi die Variante, die ich erwartet hatte. Für die Threadsicherheit würde es doch genügen, einfach in dem Slot am Anfang einen Mutex zu sperren oder?

    Bei der zweiten Möglichkeit (normales connect() oder Angabe von Qt::QueuedConnection als fünften Parameter) werden die Argumente des Signals mittels Event an das Empfängerobjekt geschickt, der Aufruf des Slots erfolgt damit im Zielthread.

    Die Vorraussetzung dafür ist das Laufen der Eventverarbeitung im Zielthread. Im Falle des Hauptthreads ist das üblicherweise durch app.exec() gewährleistet (was in deinem Fall fehlt).
    Kannst du das vielleicht noch etwas genauer erklären? Wo müsste in dem Beispiel der exec-Aufruf erfolgen?

    Funktioniert bei mir einwandfrei wenn ich qDebug() durch cout ersetze und << endl am Ende der Zeile hinzufüge.
    Da hast du wohl recht, ich weiß gerade aber auch nicht mehr ganz genau wie ich auf die Idee kam, dass das nicht funktionieren würde.

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von javatar Beitrag anzeigen
    Das ist quasi die Variante, die ich erwartet hatte. Für die Threadsicherheit würde es doch genügen, einfach in dem Slot am Anfang einen Mutex zu sperren oder?
    Ja.

    Zitat Zitat von javatar Beitrag anzeigen
    Kannst du das vielleicht noch etwas genauer erklären? Wo müsste in dem Beispiel der exec-Aufruf erfolgen?
    Üblicherweise sieht die main Funktion eines Qt Programms in etwas so aus
    Code:
    int main(int argc, char **argv)
    {
        QCoreApplication app(argc, argv); // oder QApplication wenn GUI benutzt wird
    
        // objekt(e) erzeugen
    
        return app.exec(); // Eventverarbeitung starten.
    }
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    04.11.2012
    Beiträge
    23
    Sehr gut mein Programm funktioniert jetzt (glaube ich) erstmal als Terminalversion. Im nächsten Schritt muss ich jetzt "nur" noch eine GUI schreiben.
    Nochmal danke für die freundliche Betreuung, jetzt ist mir endlich auch klar, wofür man die QApplication braucht.

    Liebe Grüße

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •