Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.03.2010, 14:52 Titel: gtk_main als Thread starten |
|
|
Hat jemand damit erfahrungen gemacht, die funktion gtk_main() als thread unter Freebasic unter windows aufzurufen?
Unter linux klappt das:
Code: |
threadwait threadcreate(cast(any ptr, @gtk_main))
|
absolut einwandfrei!
Und windows stürzt das Progamm ab |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.03.2010, 18:51 Titel: |
|
|
@28398: Irgendwie helfen mir die links nicht weiter. Im Endeffekt machen die Herren aus diesem Forum von deinem 1. Link (http://www.gtkforums.com/about1844.html) genau das, womit ich probleme unter windows habe.
Und soweit ichs erkennen kann gehts in deinem 2. Link darum mit g_threads die Events zu parallelisieren.. Also nicht das was ich machen möchte.
Und den 3. Link kannte ich schon und er hat mir auch keine neuen erkenntnisse gegeben..
trotzdem vielen dank! Ich hoffe nur das mir vielleicht noch jemand weiterhelfen kann...
Ansonsten muss ich mein laufendes GTK-Projekt veröffentlichen ohne es unter Windows zum laufen gebracht zu haben ( |
|
Nach oben |
|
|
croco97
Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 23.03.2010, 23:25 Titel: |
|
|
Hi OneCypher!
Viel Konstruktives kann ich dir dazu auch nicht sagen. Ich habe mal einen kleinen Ausflug mit Freebasic-Threads nach GTK gemacht (unter Win), um festzustellen, dass das sehr absturzträchtig ist. Meine Vermutung: Das GTK-System ist aus Sicht eines Win32-Programms nicht thread-safe. Was ja auch Sinn macht, denn GTK bringt seine eigene Threadverwaltung mit. Das würde deine Probleme erklären.
Unter Linux: Hast du's unter Gnome oder unter KDE probiert? Wenn es unter Gnome funktioniert, wäre das verständlich: Das läuft ja schon unter GTK und ein Freebasic-Threading endet vermutlich im Aufruf eines g_threads. Zumindest so mal die wilde Hypothese.
Warum muss denn gtk_main in einem eigenen Thread gestartet werden? Ist etwas ungewöhnlich. Kriegst du für irgendwelche Freebasic-Codeteile keine Ressourcen? Oder blockiert dein Freebasic-Code GTK? Letzteres lässt sich leicht beheben:
Auszug aus dem Oma-Tutorial:
"So ähnlich, wie wir in simple Freebasic mit einem sleep 10 dafür sorgen, dass noch andere Tasks zum Zuge kommen, so sorgen wir mit dem Einfügen der Zeile
while (gtk_events_pending):gtk_main_iteration:wend
dafür, dass die Hauptschleife (gtk_main_iteration) dann abgearbeitet wird, wenn GUI-Aktivitäten in der Warteschleife stecken. "
Vielleicht hilft Dir das weiter.
VG!
Croco |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 23.03.2010, 23:37 Titel: |
|
|
Du könntest doch auch gkt_main im Primärthread ausführen und den Rest in einen sekundären Thread auslagern. |
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 24.03.2010, 10:02 Titel: |
|
|
@28398: Wäre zwar möglich, aber nicht Sinn der Sache. Um mein Problem nachvollziehen zu können, habe ich das kleine Projekt veröffentlicht:
http://forum.qbasic.at/viewtopic.php?t=7079 ("Mehrere GFX-Fenster per GTK")
@croco97: Das mit Code: | while (gtk_events_pending):gtk_main_iteration:wend | klingt interessant! Ich denke, das werde ich mir näher ansehen!! Vielleicht kann ich damit mein oben genanntes klein-projekt so verändern das es wieder plattform-unabhängig ist! |
|
Nach oben |
|
|
|