Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Timeout für sich aufhängenden Thread/Timeout allgemein

  Alt 18. Mär 2009, 20:41
guten abend,

ich hab mal wieder ein "problem" mit threads... oder generell gesagt mit timeouts.

wie ich auf das problem gekommen bin: ich nutze anydac 1.x und connecte zu einer datenbank. soweit, so gut... nur wenn der server nicht vorhanden ist (falschen server angegeben), so hängt sich das programm beim connecten auf, da sich anydac aufhängt.

nun gut, eigentlich doch einfach: die connectenmethode in einen thread auslagern, dann einen timeout drum herum programmieren und eine meldung an den user ausgeben, wenn es nicht geklappt hat. aber pustekuchen... denn entweder mache ich was falsch, oder das was ich will klappt so nicht.

ich habe das wie folgt (pseudocode):
Code:
initialisiereDaten;
starteThread;
while (not Timeout) and (not Answer) do
  warte
if Teimout then
  [b]TerminateThread(x)[b]
else
 allesOk
wie man im pseudocode sehen kann ist die verwendete methode, um den thread zu beenden, oder eher abschießen, die TerminateThread-methode. ob das aber die richtige ist, weiß ich nicht wirklich, da die hilfe etwas davor warnt. ich laufe dabei auch in das problem, dass der thread sich nicht wirklich beendet, da das programm sich danach nicht mehr schließen lässt. ich glaube, dass immer noch auf die beendigung gewartet wird.

meine frage ist nun: ist das eine richtige timeout-programmierung oder wie geht man sowas denn nun wirklich an?

bevor ihr nun daher kommt und mein, dass ich anydac ersetzen soll: nein, das geschieht nicht, da ich nicht die zeit dazu habe! das problem lässt sich ja auch darauf reduzieren, dass sich der thread aufhängt (endlosschleife oder sonst was).

ich hoffe, ihr könnte mir helfen!

mfg
armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat