Seite 1 von 2

killthread reisst alles mit

Verfasst: 08.12.2006 12:38
von Zotti
Hallo Leute,

ich habe im board leider nichts gefunden was mein Problem behandelt,
darum denke ich, dass es wohl ein Denkfehler sein muss.

Code: Alles auswählen

threat.l = CreateThread(@progres(), 0)
TextGadget(2,30,90,230,25, " downloading file ", #PB_Text_Center )
;DeleteURLCacheEntry_(download$)
If URLDownloadToFile_(0,download$,verzeichnis$+datei$,0,0) = #S_OK
  KillThread(thread.l)
Der KillThread reisst mir alles weg.
Ich möchte aber doch nur die Prozedur stoppen. Ich kann es nicht in einer Schleife oder einem FileCheck machen, da ich nicht weiss wie groß das File ist.

By Olli

Verfasst: 08.12.2006 12:49
von bobobo
Schreiben will gelernt sein , Lesen übrigens auch .. Wenn Du
oben threat schreibst und unten thread dann wunder Dich
auch nicht über scheinbar komisches Verhalten :)

Verfasst: 08.12.2006 13:06
von Zotti
Oh mann,

wegen so etwas verbrate ich den vormittag!
Ich habe es nicht gesehen.
Danke für die schnelle Antwort.

By Olli

Verfasst: 08.12.2006 14:02
von Kiffi
Zotti hat geschrieben:wegen so etwas verbrate ich den vormittag!
'EnableExplicit' hilft, den Vormittag sinnvoller zu nutzen ;-)

Grüße ... Kiffi

Verfasst: 08.12.2006 14:35
von AND51
> KillThread(thread.l)
Hier kannst du .l weglassen, dies wird nur bei der Deklaration zwingend benötigt.

> threat
Willst du uns bedrohen? :lol:

Verfasst: 08.12.2006 15:44
von remi_meier
PB Help zu KillThread() hat geschrieben:Dies ist eine sehr gefährliche Operation und sollte nur selten benutzt werden. Das Problem ist, dass der Thread umgehend entfernt wird und keine Chance hat, irgendwelchen "Aufräumcode" (z.B. Speicher freigeben, Einträge freigeben, De-Allokieren seines eigenen Stacks) auszuführen.

Wenn möglich, sollte ein Flag (z.B. eine globale Variable) verwendet werden, welcher dem Thread mitteilt, sich selbst zu beenden (und das benötigte "Aufräumen" zu erledigen). Und dieser Befehl sollte nur verwendet werden, wenn dies auf irgendwelchen Gründen nicht möglich ist.
Und ich sage dir, es ist wahr!

Verfasst: 08.12.2006 16:31
von #NULL
eine frage:
in einem meiner codes benutze ich so einen thread:

Code: Alles auswählen

Procedure thread_beep()
  Beep_( beep_thread_freq, beep_thread_dura )
EndProcedure
..damit ich wärend des beeps weitermachen kann. wenn ich den beep aber vorzeitig nicht mehr haben will, benutze ich killthread(). es geht ja auch nicht anders, oder? können da rückstände (zwischen den zähnen 8) ) hängenbleiben, oder ist das in dem fall kein probem?
(oder gibt es eine api-funktion zum killen aller aktuellen beep-jobs?)

Verfasst: 08.12.2006 17:50
von remi_meier
Zum einen fehlt da mal der obligatorische Parameter der Thread-Funktion
und zum anderen kann dir wohl nur Microsoft sagen, was in der Funktion
Beep_() vor sich geht und ob ein KillThread() schädlich sein kann.

Einen Beep_() abzubrechen macht wohl höchstens Sinn bei einem "Lied"
per Beep_()... aber das kann ja auch nicht ernst gemeint sein, denn da
gibt es bessere Methoden.

Verfasst: 08.12.2006 17:53
von AND51
Wenn ein Beep_() länger als 2 ½ Sekunden dauert, dann lohnt es sich erst, ihn abzubrechen, wenn es sein muss.

Aber wenn ein Beep_() länger als 2 ½ Sekunden dauert, dann ist der Beep_() an sich einfach nur nervtötend und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere... >:)

Verfasst: 08.12.2006 17:58
von Kaeru Gaman
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere... >:)
*SCHENKELKLATSCH*

ROFEL!

you made my day, dude :mrgreen: