Hallo,
vielleicht kann mir jemand helfen. Ich benutze die Version 4.51 und habe ein Programm geschrieben,
bei welchem ein Thread unausweichbar ist. Ein harmloses, aber unschönes Problem habe ich:
Am Beginn des Aufrufes einer Procedure als Thread melde ich auf der Hauptseite mittels Textgadget
den Text "Auswertung" in roter Farbe. Nach Beendigung der Procedure sollte an derselben Stelle im Hauptprogramm
der Text "Angehalten" in schwarzer Farbe stehen. Das geschieht aber nicht ganz. Der gewünschte
Text "Angehalten" erscheint nicht, vielmehr bleibt der Text "Auswertung" dort stehen, allerdings ändert
sich die Schriftfarbe von rot auf schwarz.
Woran liegt das, muß man solche Aufrufe bei Verwendung eins Threads anders verwalten?
Viele Grüße und danke schon mal für die Antworten
Gruß
Gerhard
Probleme mit TextGadget bei Thread-Ausführung
Re: Probleme mit TextGadget bei Thread-Ausführung
Frage 1: Warum nutzt du nicht eine aktuelle Version? Die neueren PB-Versionen beheben u.a. Bugs und haben mehr funktionen.
Frage 2: Hast du Thread-Safe aktiviert?
Frage 3: Wo ist der Quellcode? Oder kannst du einen keinen Code schreiben der das Problem reproduziert?
Ich weiß nicht, ob Gadgets schon damals Threadsicher waren, vermutlich nicht.
EIne Möglichkeit wäre also, wenn du eine eigene Variable setzt, die im Hauptprogramm gelesen wird, und dann dort das Gadget ändert (und nicht der Thread).
Frage 2: Hast du Thread-Safe aktiviert?
Frage 3: Wo ist der Quellcode? Oder kannst du einen keinen Code schreiben der das Problem reproduziert?
Ich weiß nicht, ob Gadgets schon damals Threadsicher waren, vermutlich nicht.
EIne Möglichkeit wäre also, wenn du eine eigene Variable setzt, die im Hauptprogramm gelesen wird, und dann dort das Gadget ändert (und nicht der Thread).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Probleme mit TextGadget bei Thread-Ausführung
Hallo,
danke für die Antwort. Ich hatte vor vielen Jahren mein PureBASIC gekauft. Es hieß damals, ich erhalte
für immer die Updates. Tja, und dann kam ich bis zur 4.51 und jetzt müßte ich eine neue Version kaufen.
Vielleicht mache ich das ja auch noch mal.
Quelltext? Ohjee, ich denke zum Posten ist's ein bisserl viel.
Ich denke mal, da ist ein Bug drin und deshalb weiß die Hauptseite nicht mehr, was für einen
Text ich dort posten will. Naja, ich finde vielleicht eine Lösung.
Trotzdem vielen Dank und bis bald
Gruß
Gerhard
danke für die Antwort. Ich hatte vor vielen Jahren mein PureBASIC gekauft. Es hieß damals, ich erhalte
für immer die Updates. Tja, und dann kam ich bis zur 4.51 und jetzt müßte ich eine neue Version kaufen.
Vielleicht mache ich das ja auch noch mal.
Quelltext? Ohjee, ich denke zum Posten ist's ein bisserl viel.
Ich denke mal, da ist ein Bug drin und deshalb weiß die Hauptseite nicht mehr, was für einen
Text ich dort posten will. Naja, ich finde vielleicht eine Lösung.
Trotzdem vielen Dank und bis bald
Gruß
Gerhard
Re: Probleme mit TextGadget bei Thread-Ausführung
In Threads sollte man nur sehr kleine Programmteile stecken, die dann wirklich parallel und super schnell laufen sollen.
Für langsame Teile wie Textanzeigen, kann man pseudo multitasking verwenden (PostMessage usw.).
Um sicherzugehen, dass alle Text-Botschaften (Egal ob Ein- oder Ausgabe, also Get- oder SetGadget) komplett abgearbeitet werden, kann man eine Zeile
einfügen.
Bei Threads vermeide ich den ganzen Botschaftensalat mit globalen String-Arrays.
Nach Beendigung des Threads kann der Text dann ausgegeben werden:
Für langsame Teile wie Textanzeigen, kann man pseudo multitasking verwenden (PostMessage usw.).
Um sicherzugehen, dass alle Text-Botschaften (Egal ob Ein- oder Ausgabe, also Get- oder SetGadget) komplett abgearbeitet werden, kann man eine Zeile
Code: Alles auswählen
While WindowEvent() : Wend ;DoEvents()Bei Threads vermeide ich den ganzen Botschaftensalat mit globalen String-Arrays.
Nach Beendigung des Threads kann der Text dann ausgegeben werden:
Code: Alles auswählen
...
WaitThread(aThread.i(I))
SetGadgetText(String_Ausgabe,g_Ausgabe(I).s)
While WindowEvent() : WendRe: Probleme mit TextGadget bei Thread-Ausführung
Danke allen. Ich mußte einen Thread verwenden, weil eine Schleife läuft, in welcher ein
Screendump ausgewertet wird. Es geht aber jetzt alles (hoffe ich).
Screendump ausgewertet wird. Es geht aber jetzt alles (hoffe ich).