Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Ein Problem mit QThread

  1. #1
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    Ein Problem mit QThread

    Moin!

    Ich tue mich momentan etwas schwer mit Threads und komme nicht ganz weiter. Deswegen muß ich mal eben auf eure Hilfe zurückgreifen ...

    Ich habe hier eine Art rudimentäres, aber properitäres Datenübertragungsprogramm (unter Windumm).
    Ich baue mittels RAS eine Verbindung auf und starte meinen Übertragungsthread.
    Sobald der beendet ist, möchte ich die Verbindung wieder beenden, habe aber keinen Plan, wie ich jetzt rauskriegen kann, wann die Übertragung beendet wurde.
    Okay eine Umgebungsvariable setzen ist schon klar, aber wie bekommt das umgebende Programm den Statuswechsel mit?
    Meine Versuche mit signal/slot sind bislang fehlgeschlagen ...
    Bodo
    Systemadmistration UNIX

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    Habe ich das richtig verstanden?

    - Du baust von Rechner A zu Rechner B eine Verbindung auf
    - Auf Rechner B läuft dieses Datenübertragungsprogramm
    - Dieses Programm schickt die Daten an Rechner A
    - Du weißt nicht wann Rechner B fertig ist mit dem Übertragen
    - Deshalb kannst du die Verbindung von A nach B nicht beenden, weil das sonst eventuell zu früh passieren würde

    Wenn dem so ist, dann kannst du doch einfach auf Rechner B, nachdem dieses Programm fertig ist (es wird ja wohl selbst wissen wann die Übertragung fertig ist ) noch selbst ein TRANSFER COMPLETE an Rechner A schicken.
    Das das Programm ja nicht im Quälcode vorliegt ist es vielleicht möglich dieses Programm innerhalb eines selbstgeschriebenen Programms aufzurufen.

    So in etwa (Pseudocode):
    Code:
    if( rufeProprietäresProgrammAuf( wilde Argumente) == true);  // Übertragung war erfolgreich
        sendeAnRechnerA( "TRANSFER COMPLETE");
    Auf Rechner A musst du nur auf TRANSFER COMPLETE warten.
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  3. #3
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Zitat Zitat von Boron
    Habe ich das richtig verstanden?

    - Du baust von Rechner A zu Rechner B eine Verbindung auf
    - Auf Rechner B läuft dieses Datenübertragungsprogramm
    - Dieses Programm schickt die Daten an Rechner A
    - Du weißt nicht wann Rechner B fertig ist mit dem Übertragen
    - Deshalb kannst du die Verbindung von A nach B nicht beenden, weil das sonst eventuell zu früh passieren würde
    Auf A & B läuft solch ein Programm, welches Daten empfängt / sendet.
    Wenn dem so ist, dann kannst du doch einfach auf Rechner B, nachdem dieses Programm fertig ist (es wird ja wohl selbst wissen wann die Übertragung fertig ist ) noch selbst ein TRANSFER COMPLETE an Rechner A schicken.
    [...]
    Nein, so einfach ist es eben nicht.
    Ich muß eine gewissen Reichenfolge einhalten:
    PHP-Code:
    wähle Telefonnummer
     
    erzeuge Thread
       
    öffne Socket und sende Daten (wenn verfügbar)
       - 
    empfange Daten (wenn verfügbarauf selben Socket
     
    beende Wählverbindung 
    Ich bekomme zwar mit, wann die empfangenen Daten komplett sind, wenn also alles innerhalb des Threads okay ist, aber das darumliegende Programm kommuniziert nicht mit dem Thread.
    Bodo
    Systemadmistration UNIX

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Kannst du kurz da mit dem darunter liegenden Programm erklären?

    Machst du selbst die Übertragung oder startest du ein externes Programm?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Das eigentliche Programm initialisiert die Verbindung, wählt also mittels RAS.
    Steht die Verbindung, wird ein Thread gestartet, in dem die komplette Übertragung gehandelt wird. Dazu verwende ich eigene Routinen, kein externes Programm.

    Wenn im Thread jetzt feststeht, das die Datenübertragung komplett war, muß dieser quasi ein Signal an das Programm starten, welches den Thread erzeugt hat, damit er gelöscht werden kann und die Verbindung beendet wird.
    Bodo
    Systemadmistration UNIX

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Der Thread muss einfach als letztes vor verlassen der run() Methode ein CustomEvent mit QApplication:ostEvent an den Hauptthread der Anwendung schicken.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Danke!
    Ich glaub, daß sollt ich wohl noch hinbekommen *g*
    Ich darf mich ja heute wieder damit beschäftigen ...
    Bodo
    Systemadmistration UNIX

Lesezeichen

Berechtigungen

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