| Autor |
Nachricht |
Chaka
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.12.2011
Beiträge: 44
|
Chaka Mitglied
16:23:20 22.03.2012 Titel: |
QCoreApplication::processEvents |
Zitieren |
Hi,
könnte mir jemand erklären was oben genannte Methode macht bzw. auch allgemein was zu der Klasse sagen? Hab mir die Dokumentation angeschaut, aber werde nicht wirklich schlau daraus. Denke mal, dass es sich hierbei ja um eine wichtige Klasse handelt, verstehe aber zumindest auf englisch die Funktion der einzelnen Methoden nicht. Aaus der Einleitung sehe ich, dass es um eine "Ereignisschleife" geht und das QCoreApplication alle Anwendungen "verwaltet". Vielleicht kann ja jemand was dazu sagen. |
_________________ Chaka, Du schaffst es
|
|
 |
$-BootLag-$
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.10.2010
Beiträge: 192
|
$-BootLag-$ Mitglied
21:32:24 23.03.2012 Titel: |
|
Zitieren |
Das ist eine nützliche Funktion. Stell dir vor du hast ein Button, was angeklickt und dann eine lange Berechnung durchführt. Die Berechnung ist nicht in einen Thread ausgelagert. Damit z.B. ein Abbruchsbutton erreichbar ist(bzw. die gesamt GUI) könntes du bei jeder Schleifenwiederholung app->processEvents() aufrufen. Bevor er nun weiterrechnet, wird erst überprüft, ob anderes Events vorliegen. Das ist z.B. das Klicken eines Abbruchbuttons, sodass deine Berechnung abgebrochen wird. Dies ist nur ein Beispiel. Ich verwende die Funktion noch an vielen weiteren Stellen. Das ist aber immer situationsabhängig... |
|
|
|
 |
Chaka
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.12.2011
Beiträge: 44
|
Chaka Mitglied
01:31:00 25.03.2012 Titel: |
|
Zitieren |
Hi,
erstmal danke für die Antwort. Einiges ist mir aber noch unklar:
1. Was ist genau ein Thread? Hatte das auch in der Qt Doku gelesen, konnte aber nicht genau die Bedeutung des Wortes raus bekommen.
2.
| Zitat: | | Damit z.B. ein Abbruchsbutton erreichbar ist(bzw. die gesamt GUI) könntes du bei jeder Schleifenwiederholung app->processEvents() aufrufen. Bevor er nun weiterrechnet, wird erst überprüft, ob anderes Events vorliegen. |
Von welcher Schleife sprichst Du hier?
Werd mich auf jeden Fall schonmal in das Thema Thread einlesen sofern ich was gescheites finde. |
_________________ Chaka, Du schaffst es
Zuletzt bearbeitet von Chaka am 01:31:13 25.03.2012, insgesamt 1-mal bearbeitet |
|
 |
arghonaut
Unregistrierter
|
arghonaut Unregistrierter
08:33:48 25.03.2012 Titel: |
|
Zitieren |
1) Google->Thread. Erster Treffer ist (wie so oft) Wikipedia.
2) IRGEND EINE Schleife, die lange braucht und deshalb die Eventqueue blockiert, was deine GUI einfrieren lässt. |
|
|
|
 |
Chaka
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.12.2011
Beiträge: 44
|
Chaka Mitglied
17:25:39 25.03.2012 Titel: |
|
Zitieren |
| Zitat: | | 1) Google->Thread. Erster Treffer ist (wie so oft) Wikipedia. |
Les ich mir durch .
| Zitat: | | 2) IRGEND EINE Schleife, die lange braucht und deshalb die Eventqueue blockiert, was deine GUI einfrieren lässt. |
Verstehe ich immer noch nicht ganz. Sagen wir mal ich rufe einen Prozess mit QProcess auf, der meine GUI einfriert. Das Event dieses Prozesses wird dann sozusagen aufgerufen/abgehandelt und dazu friert die GUI bis auf weiteres ein - keine anderen Aktionen sind in der GUI Anwendung erstmal soweit dann möglich. Wo ist denn hier jetzt aber genau die angesprochene Schleife? |
_________________ Chaka, Du schaffst es
|
|
 |
arghonaut
Unregistrierter
|
arghonaut Unregistrierter
21:41:20 25.03.2012 Titel: |
|
Zitieren |
| Chaka schrieb: | | Sagen wir mal ich rufe einen Prozess mit QProcess auf, der meine GUI einfriert. |
Ein Prozess mit QProcess gestartet wird sicher NICHT blockieren (außer du verwendest Methoden, die explizit auf den Prozess warten). Den Rest deiner Aussage hab ich mal weggeschnippelt, da du einfach noch nicht verstehst, von was du reden willst.
Eine Schlife ist so ein Konstrukt mit for oder while.
| C++: | while(bedingung) {
tu_was_ganz_aufwaendiges();
} | |
Das rödelt und rödelt und blockiert somit andere nötige Aufgaben, die in einer GUI anfallen wie z.B. Widgets neu zeichnen, oder andere Aktionen wie den Click auf den "Abbrechen"-Button bearbeiten. Um diese Sachen (die üblicherweise in einer Eventloop laufen) doch abarbeiten zu können, packst du das processEvents() IN die Schleife.
Ist aber nicht so dolle, eine Lösung über Threads (die nicht blockieren, da sie parallel zum GUI-Thread laufen) wäre schöner. |
|
|
|
 |
Chaka
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.12.2011
Beiträge: 44
|
Chaka Mitglied
00:11:40 26.03.2012 Titel: |
|
Zitieren |
|
 |
arghonaut
Unregistrierter
|
arghonaut Unregistrierter
08:50:08 26.03.2012 Titel: |
|
Zitieren |
Events fallen STÄNDIG an, es reicht also nicht, einmal processEvents() aufzurufen. Wie gesagt, das müsste IN die while-Schleife.
ABER: Wie ebenfalls schon gesagt arbeitet QProcess asynchron (er blockiert nicht). Mach das einfach über SIGNAL/SLOT und häng dich an das finished()-Signal deines Prozesses. |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|