Veröffentlicht 20. Mai 200322 j hi all, momentan probiere ich ein "ProgressWnd" anzuzeigen, das während eines längeren Prozesses einen ProgressBar anzeigt, der einfach durchläuft. Man kann sich das vorstellen wie den Mini-Dialog der erscheint, wenn man im Explorer Dateien kopiert. Die Funktionalität ist bereits vorhanden, also zum Problem: Den ProgressBar lasse ich in einem extra Thread laufen, nur dass dieser eben nicht der GUI Thread ist. D.h. der lange Prozess läuft durch und erst dann kommt der ProgressBar mit dem zeichnen dran. Wie kann man einen zweiten GUI-Thread öffnen, der sich um das Zeichnen des ProgressBar im nicht modalen Dialog kümmert? thanx in advance Phyrex
20. Mai 200322 j --> Verschoben: C++: Compiler, IDEs, APIs, weil Standard-C/C++ keine Threads kennt. Original geschrieben von phyrex Wie kann man einen zweiten GUI-Thread öffnen, der sich um das Zeichnen des ProgressBar im nicht modalen Dialog kümmert? (Ich gehe im folgenden davon aus, dass du von Windows redest) Der GUI-Thread ist der, der das Fenster erstellt, denn für diesen Thread richtet Windows die Messagequeue ein. Wenn also dein ProgressWnd im Hintergrund Arbeit verrichten soll, musst du das Fenster aus dem ursprünglichen Threadkontext erstellen, und dann erst den Arbeitsthread starten. Einen zweiten GUI-Thread solltest du dann nicht mehr benötigen.
20. Mai 200322 j eben dieses versuche ich umzukehren, um dem ProgressWnd eine möglichst grosse wiederverwendbarkeit zu gewähren. wenn man die langen aktionen, die bereits im Code vorhanden sind, jeweils in einen Worker Thread packen muss, ändert man auch die komplette struktur und das interface des bestehenden codes, zumindest durch eine schnittstellen-erweiterung. das soll aber verhindert werden. kann nicht nur der GUI Thread das Fenster erzeugen? werd da mal rumprobieren... vielen dank für konstruktive antworten Phyrex
20. Mai 200322 j ist es denn nicht üblich, einen zweiten gui thread zu öffnen? finde quasi keinerlei informationen dazu...
20. Mai 200322 j Original geschrieben von phyrex ist es denn nicht üblich, einen zweiten gui thread zu öffnen? finde quasi keinerlei informationen dazu... Eigentlich nicht. Meistens reicht ein GUI-Thread pro Prozess aus, weil der eigentlich sowieso die meiste Zeit wartet. Aber du kannst ja genausogut zwei neue Threads starten. Ein Thread wird dadurch zum GUI-Thread, indem du aus diesem Thread ein Fenster erzeugst. Das darf halt nicht der sein, der die ganze Arbeit macht.
20. Mai 200322 j danke! habe mich inzwischen überzeugen lassen und schreibe wrapper functions für die arbeit und packe das in einen worker thread. das fenster läuft in der zwischenzeit im gui thread mit. Phyrex
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.