Probleme mit TextGadget bei Thread-Ausführung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Probleme mit TextGadget bei Thread-Ausführung

Beitrag von dl5ndh »

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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Probleme mit TextGadget bei Thread-Ausführung

Beitrag von STARGÅTE »

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).
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
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: Probleme mit TextGadget bei Thread-Ausführung

Beitrag von dl5ndh »

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
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

Re: Probleme mit TextGadget bei Thread-Ausführung

Beitrag von hyperG »

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

Code: Alles auswählen

While WindowEvent() : Wend ;DoEvents()
einfügen.

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() : Wend
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: Probleme mit TextGadget bei Thread-Ausführung

Beitrag von dl5ndh »

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).
Antworten