PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sind GUI-Programme fast immer single-threaded?



nobody0
17-09-2003, 10:47
Sind eigentlich fast alle GUI-Programme single-threaded? :confused:

Bei einigen Programmen nervt mich besonders, dass z. B. während eines minutenlangen Formatierens überhaupt nichts anderes mit dem Programm gemacht werden kann, während sich die zweite CPU lanweilt und ich wirklich keine Lust habe unnötig zu warten (man lebt ja nicht ewig) :mad:

Wie ist eigentlich die Situation bei wxWindows; kann man damit nur single-treaded Programme erstellen? Und wie ist da der SMP-, HT- und Cluster-Support? :confused:

Silver
17-09-2003, 12:15
also, ich denke sehr wohl dass du Threads bei wxWindows erstellen kannst, weil ja Threads vom OS bereitgestellt werden.
Aber bei manchen Situation wirst du nicht ohne Threads auskommen können...

mfG

nobody0
17-09-2003, 12:36
Original geschrieben von Silver
also, ich denke sehr wohl dass du Threads bei wxWindows erstellen kannst, weil ja Threads vom OS bereitgestellt werden.
Aber bei manchen Situation wirst du nicht ohne Threads auskommen können...

mfG

Also ich meine Multi-Threading, so dass das Programm z. B. gleichzeitig eine Speicherkarte beschreibt und Daten auswertet u. plottet und ich gleichzeitig die Optionen ändere.
Können das nur die wenigsten Programme und ist das bei wxWindows ebenso? :confused:

anda_skoa
17-09-2003, 12:58
Original geschrieben von nobody0
Sind eigentlich fast alle GUI-Programme single-threaded? :confused:


Nicht alle, aber viele, weil es meistens nicht nötig ist und Threads immer schwieriger zu handhaben sind.



Wie ist eigentlich die Situation bei wxWindows; kann man damit nur single-treaded Programme erstellen? Und wie ist da der SMP-, HT- und Cluster-Support? :confused:

Üblicherweise ist zumindest die ganze GUI Aufgabe eines einzelnen Threads. Teilaufgaben des Programms können sicher mit jedem Toolkit in Threads ausgelagert werden und diese müssen dann mit dem Hauptthread geeignet kommunizieren.

Oft reicht es einen Kindprozess zu benutzen und mit dem über Pipes oder Sockets zu kommunizieren.

Ciao,
_

nobody0
17-09-2003, 19:49
Aha, und wie lagert man mit einem Toolkit aus? :confused:

Sprachen wie Java sind doch auch für echte Parallelität entworfen worden und hinter einer Klickibunti-Grafik dann nur single-threaded zu arbeiten ist deshalb doch steinzeitlich; sowas würde ich höchstens beim HelloWorld-Programm machen (obwohl es davon auch Cluster-Versionen gibt).
Sowas wie Formatieren von /dev/sda und gleichzeitig von /dev/sdb lesen ist doch trivial und sowas wie reentrant Funktionen kann man doch problemlos nebenbei laufen lassen. Sowas ist doch schon bei kleinen Microcontrollern üblich.

tuxipuxi
17-09-2003, 20:31
der begriff steinzeitlich ist ungluecklich gewaehlt, du meintest wahrscheinlich zeitgemaess ;) .

was willst du jetzt eigentlich wissen? wenn du schon sagst, dass du auf gar keinen fall single-threaded programmieren wuerdest, wenn ueberhaupt bei einem hello world, wozu fragst du dann noch?

nach nur 30 sekunden suche kann ich dir deine frage ob wxwindows threadprogrammierung ermoeglicht beantworten:
http://www.lpthe.jussieu.fr/~zeitlin/wxWindows/docs/wxwin400.htm#wxthread
(nein ich habe keine deutsche uebersetzung).

gruss,

tuxipuxi.

oracle2025
17-09-2003, 22:03
In einem GUI-Programm nur einen Thread zu verwenden, kann gute Gründe haben, z.B. gestaltet sich die Fehlersuche einfacher, ausserdem können bestimmte Fehler prinzipbedingt schon mal nicht auftreten, also ist das schon sinnvoll.
Abgesehen davon kann man bei längeren Berechnung zwischendurch ja die Gui updaten(wxYield heisst das unter wxWindows glaub ich) und Progressbars und so was verwenden, und das alles mit nur einem Thread.

kommt halt drauf an, was für einen Typ von Programm man macht. In anderen fällen kanns durchaus sinnvoll sein mehrere Threads zu verwenden. unter wxWindows kann man dann z.B. mit wxPostEvent Events vom Arbeiter Thread an die GUI schicken.

nobody0
17-09-2003, 22:48
Aha, danke :)

Naja, die Kollegen, die GUI-Programme schreiben finden singlethreaded Programme ok (schlecht Gewohnheiten sind schwer zu beseitigen), aber sowas primitives nervt gewaltig, denn ich muss schon bei der Microcontroller-Programmierung mehrere Threads programmieren und privat benutze ich fork häufig. Deshalb will ich auch bei GUI-Programmen nicht auf singlethreaded beschränkt bleiben.

Lin728
18-09-2003, 07:46
Ich verstehe irgendwie den sinn deines Posts nicht...

Alex_K
18-09-2003, 08:56
wxwindows kennt threads. die übersicht gibts hier:

http://www.wxwindows.org/manuals/2.4.1/wx494.htm#wxthreadoverview

anda_skoa
18-09-2003, 09:56
Original geschrieben von ceisserer
Ich verstehe irgendwie den sinn deines Posts nicht...

Ich glaube das versteht außer ihm niemand.

Vielleicht leidet er unter einenm unterbewussten Wunsch, sich das Leben so schwer wie möglich zu machen.

Oder er hat den Unterschied zwischen primitv und simpel noch nicht verstanden.

Ciao,
_

Lin728
18-09-2003, 12:17
;-)

nobody0
18-09-2003, 12:21
Was ist denn da schwer zu verstehen, dass ich z. B. eine Speicherkarte formatieren u. gleichzeitig eine andere auslesen möchte? :confused:
Das geht doch schon mit einer Bash + screen/& (z. B. "cat /dev/sdb > foo.out&; cat bar.out > /dev/sdc") ganz einfach und das erwarte ich auch von Programmen mit grafischer Oberfläche! Es muss ja nicht sein, dass ein einziger Prozess alles andere unnötig blockiert, so wie die Kollegen das Programmieren (u. mich damit unnötig warten lassen).

arthur
18-09-2003, 12:35
du trennst aber normaleweise die Gui (view) von deiner verarbeitungslogik (model),
so dass die gui in einem und das model auch in einem (oder mehreren) thread(s) laufen.
du brauchst aber in wenigsten fällen mehrere threads für die gui.

gruss
Arthur

tuxipuxi
18-09-2003, 13:01
Original geschrieben von nobody0
Was ist denn da schwer zu verstehen, dass ich z. B. eine Speicherkarte formatieren u. gleichzeitig eine andere auslesen möchte? :confused:
Das geht doch schon mit einer Bash + screen/& (z. B. "cat /dev/sdb > foo.out&; cat bar.out > /dev/sdc") ganz einfach und das erwarte ich auch von Programmen mit grafischer Oberfläche! Es muss ja nicht sein, dass ein einziger Prozess alles andere unnötig blockiert, so wie die Kollegen das Programmieren (u. mich damit unnötig warten lassen).

a) du bist mit deinen kollegen nicht einverstanden
b) du willst eine speicherkarte schreiben und eine andere auslesen und weisst nicht wie es geht
c) du planst so etwas mit wxwindows (warum auch immer)
d) du willst die softwarewelt revolutionieren.

was davon trifft zu?

anda_skoa
18-09-2003, 16:26
Original geschrieben von nobody0
Was ist denn da schwer zu verstehen, dass ich z. B. eine Speicherkarte formatieren u. gleichzeitig eine andere auslesen möchte? :confused:

Das ist nicht schwer zu verstehen, wir verstehen nur nicht, warum du auf Biegen und Brechen unbedingt Threads verwenden willst und alle Programme die locker ohne auskommen als primitv bezeichnest.

Zum Formatieren gibt es üblicherweise Commandline Tools.
Das selber im eigenen Code nachzubauen nur damit man es in einem Thread laufen lassen kann, halte ich für ziemlichen Overkill.

Ich würde da das Commandline Tool aufrufen (in meinem Fall mit QProcess/KProcess)



Es muss ja nicht sein, dass ein einziger Prozess alles andere unnötig blockiert, so wie die Kollegen das Programmieren (u. mich damit unnötig warten lassen).

Das ist natürlich schlecht.
Eine GUI sollte niemals blockieren, zumindest nicht >= 1 Sekunde.

Ciao,
_

nobody0
18-09-2003, 19:46
Original geschrieben von anda_skoa

Das ist natürlich schlecht.
Eine GUI sollte niemals blockieren, zumindest nicht >= 1 Sekunde.


Ja, das meine ich. Der eine Thread dauert mindestens 2 Minuten und da kann ich statt an etwas anderem arbeiten nur warten. Deshalb stört mich das.

tuxipuxi
18-09-2003, 20:04
noch einmal:

was willst du???????

ich kann nicht zu deinen kollegen gehen und sagen, dass sie scheisse sind.. du schon. ob dir das was bringt wage ich zu bezweifeln ;).

nobody0
19-09-2003, 11:06
Original geschrieben von tuxipuxi
noch einmal:

was willst du???????


Viel Geld, ein Haus (Villa), Rennwagen, Yacht usw. ...

Ich wollte nur mal wissen wie die Situation bei Programmen mit GUI allgemein ist und wie man speziell bei wxWindows multithreaded programmiert. Von C- u. Assembler-Programmen kenne ich das mit fork u. pthreads sowie Interruptserviceroutinen.

anda_skoa
19-09-2003, 11:33
Original geschrieben von nobody0
Ich wollte nur mal wissen wie die Situation bei Programmen mit GUI allgemein ist und wie man speziell bei wxWindows multithreaded programmiert.

Das wurde jetzt ja schon mehrmals beantwortet, Thema hiermit erledigt.

Ciao,
_