Xojo Conferences
XDCMay2019MiamiUSA

Thread-Probleme (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: Ordner selektieren
Next thread: signing Probleme


Probleme mit String Bearbeitung   -   Markus Schnell
  Thread-Probleme   -   Stefan Mettenbrink
   Re: Thread-Probleme   -   Stefan Mettenbrink
   Re: Thread-Probleme   -   Christian Schmitz
   Re: Thread-Probleme   -   Stefan Mettenbrink
   Re: Thread-Probleme   -   Christian Schmitz
   Re: Thread-Probleme   -   Stefan Mettenbrink
   Re: Thread-Probleme   -   Christian Schmitz

Thread-Probleme
Date: 07.11.11 19:45 (Mon, 7 Nov 2011 19:45:23 +0100)
From: Stefan Mettenbrink
Ich habe eine Hintergrundroutine, die eigenständig diverse Eingaben
mit dem Datenbestand abgleicht. Da das mitunter etwas auern kann, habe
ich das in einen Thread gepackt und lasse den nebenher arbeiten.
Damit bei Neueingaben die laufende Überprüfung nicht mit
überholten Daten weiter durchläuft, gibt es bei mir folgenden Code:
if Butler.bs.IsRunning then
Butler.bs.Abbruch=true//ein Flag, das im Run.Event
regelmäßig abgefragt wird
ti=ticks+300
do
if Butler.bs.IsRunning=false or Ticks>ti then
exit
end
loop
butler.bs.Kill
end
if Butler.bs.IsRunning=false then
Butler.bs.Run //<----------------- Problemstelle
end

Eigentlich hatte ich erwartet, dass durch IsRunning=false sicher
gestellt ist, dass der Thread nicht läuft. Dennoch bekomme ich
gelegentlich an der gekennzeichneten Stelle eine
ThreadAlreadyRuning-Exception :-(

Offensichtlich mache ich etwas wesentliches falsch.
Wie sollte ich es korrekter Weise machcen, damit der Thread gestoppt
wird und ich mit neuen Parametern erneut einen Run aufrufen kann?

MfG, Metti.

Re: Thread-Probleme
Date: 08.11.11 20:04 (Tue, 8 Nov 2011 20:04:03 +0100)
From: Stefan Mettenbrink
Christian Schmitz wrote:

> Bei dem hier wird erst die neue Instanz erzeugt und beim Zuweisen dann die alte freigegeben.
>
>> bs=New ButlerSuche
>
> Wobei das gleich nil setzen normal ganz automatisch passiert.

Danke.

MfG, Metti.

Re: Thread-Probleme
Date: 08.11.11 19:52 (Tue, 8 Nov 2011 19:52:13 +0100)
From: Christian Schmitz

Am 08.11.2011 um 18:06 schrieb Stefan Mettenbrink:

> Christian Schmitz wrote:
>
>>> Wenn eine Instanz durchgelaufen ist, beendet sie sich dann vollständig
>>> und belegt keinen Speicher mehr?
>>
>> Wenn die letzte Referenz freigegeben wird, müsste alles aus dem Speicher sein.
>
> Wie gebe ich die frei?
>

das hier:

> bs=nil

Bei dem hier wird erst die neue Instanz erzeugt und beim Zuweisen dann die alte freigegeben.

> bs=New ButlerSuche

Wobei das gleich nil setzen normal ganz automatisch passiert.

Gruß
Christian

--

Re: Thread-Probleme
Date: 08.11.11 18:06 (Tue, 8 Nov 2011 18:06:00 +0100)
From: Stefan Mettenbrink
Christian Schmitz wrote:

>> Wenn eine Instanz durchgelaufen ist, beendet sie sich dann vollständig
>> und belegt keinen Speicher mehr?
>
> Wenn die letzte Referenz freigegeben wird, müsste alles aus dem Speicher sein.

Wie gebe ich die frei?

Bisher erzeuge ich so die Instanz:
In einem Fenster mit Namen Butler (in dem auch bs as Butlersuche
deklariert ist)steht:

bs=New ButlerSuche

Damit habe ich die Instanz erzeugt. Reicht einfach:
bs=nil

Oder
bs=New ButlerSuche

> Oft hilft das, weil nicht jeder Programmierer daran denkt, dass beim zweiten Aufruf nicht alle Variablen 0/nil sind.

Das habe ich schon bedacht.

Ich teste mal ein wenig.

MfG, Metti.

Re: Thread-Probleme
Date: 08.11.11 10:33 (Tue, 8 Nov 2011 10:33:01 +0100)
From: Christian Schmitz

Am 08.11.2011 um 06:38 schrieb Stefan Mettenbrink:

> Benötigt nicht jede neue Instanz zusätzlichen Speicher und
> Prozessorzeit?

Klar.

> Wenn eine Instanz durchgelaufen ist, beendet sie sich dann vollständig
> und belegt keinen Speicher mehr?

Wenn die letzte Referenz freigegeben wird, müsste alles aus dem Speicher sein.

> Bisher bin ich davon ausgegangen, dass ein Thread, wie eine Funktion,
> einmal erzeugt wird und dann beliebig oft benutzt werden kann.


Müsste eigentlich. Probier es doch mal mit einer neuen Instanz.

Oft hilft das, weil nicht jeder Programmierer daran denkt, dass beim zweiten Aufruf nicht alle Variablen 0/nil sind.

Gruß
Christian

--
Re

Re: Thread-Probleme
Date: 08.11.11 06:38 (Tue, 8 Nov 2011 06:38:10 +0100)
From: Stefan Mettenbrink
Christian Schmitz wrote:

>> Wie sollte ich es korrekter Weise machcen, damit der Thread gestoppt
>> wird und ich mit neuen Parametern erneut einen Run aufrufen kann?
>
> Ich würde einfach das Flag setzen und eine neue Threadinstanz erzeugen.
> Lass den alten zu Ende laufen und den neuen starten.

Benötigt nicht jede neue Instanz zusätzlichen Speicher und
Prozessorzeit?
Wenn eine Instanz durchgelaufen ist, beendet sie sich dann vollständig
und belegt keinen Speicher mehr?

Bisher bin ich davon ausgegangen, dass ein Thread, wie eine Funktion,
einmal erzeugt wird und dann beliebig oft benutzt werden kann.

MfG, Metti.

Re: Thread-Probleme
Date: 07.11.11 22:38 (Mon, 7 Nov 2011 22:38:45 +0100)
From: Christian Schmitz

Am 07.11.2011 um 19:45 schrieb Stefan Mettenbrink:

> Wie sollte ich es korrekter Weise machcen, damit der Thread gestoppt
> wird und ich mit neuen Parametern erneut einen Run aufrufen kann?

Ich würde einfach das Flag setzen und eine neue Threadinstanz erzeugen.
Lass den alten zu Ende laufen und den neuen starten.

Gruß
Christian

--