StackOverflow bei Mehrfachaufruf eines Links
-
Ich will ein Programm schreiben, dass diese Funktionen hat:
- man klickt auf ein Button und der setzt Timer1->Enabled auf true
- der Timer ruft einen Link auf im Interval = 100
- der Link beinhaltet eine Variable, die pro Timeraufruf um 1 erhoeht wird
- wenn die Variable = 70000 ist, soll der Timer stoppenDer Link ist:
"http://streetbattle.maedhros.com/sb1speed/gebdet.php?gebid=" + IntToStr(i) + "&action=3"Das ist die Routine des Timers:
void __fastcall TForm1::Timer1Timer(TObject *Sender) { link = "http://streetbattle.maedhros.com/sb1speed/gebdet.php?gebid=" + IntToStr(i++) + "&action=3"; ShellExecute (Handle, "open", link.c_str(), 0, 0, SW_SHOW); if (i = 70000) { Timer1->Enabled = false; } link = ""; }Die Seite wird 89 mal Aufgerufen also bis:
http://streetbattle.maedhros.com/sb1speed/gebdet.php?gebid=89action=3Danach kommt ein Fehler EStackOverflow.
Weiss jemand, wie ich das behebe?Danke
-
Und wo hält da der Debugger an?
-
Eigentlich dürfte die Funktion sogar nur einmal durchlaufen werden:
if (i = 70000)ist schon im ersten Durchlauf true...
-
Da haelt der Compiler auch an.
Aber warum ist das gleich beim ersten Durchlauf true??
-
weil Du i die 70000 zuweist (i = 70000) und nicht i mit 70000 vergleichst (i == 70000). Somit ist die Bedingung immer true...
-
Hallo
EStackOverflow = Stackueberlauf
vermutlich dauert dein Aufruf von ShellExecute laenger als
deine ZeitspanneAbhilfe:
zuerst als erstes in deiner Timer1Timer "Timer1->Enabled = false;
in Timer1Timer dann kannst du falls noetig
deinen Time rwieder aktivierenMfG
Klaus
-
*Lacht laut*
Ich danke dir

Doch kommt immernoch der Fehler.
EStackOverflow bei: if (i == 70000)*EDIT Danke Klaus, jetzt geht es, das wird es gewesen sein
*
-
Dann wurde der Timer aber an anderer Stelle wieder aktiviert.
Der gepostete Code deaktiviert den Timer beim ersten Durchlauf...
Grüße Joe_M.
-
Lief trotzdem weiter, bis, wie gesagt, i = 89 war.
*EDIT nun habe ich eine 2. Frage, ich stelle sie mal hier rein:
if (ComboBox1->Text == ComboBox1->Items[0])'operator==' not implemented in type 'AnsiString' for arguments of type 'TStrings'
Wie kriege ich das behoben?
-
if (ComboBox1->Text == ComboBox1->Items->Strings[0])Geht nur so, warum nicht direkt weiß ich auch nicht genau...
Und nextes mal bitte Suchfunktion benutzen... Thema gabs schon oft genug.
-
aaaabyx schrieb:
if (ComboBox1->Text == ComboBox1->Items->Strings[0])Geht nur so, warum nicht direkt weiß ich auch nicht genau...
Weil die Eigenschaft Items einen Zeiger auf ein TStrings-Objekt zurückliefert und nicht auf ein Array von AnsiStrings.
-
Hallo
statt der Version
if (ComboBox1->Text == ComboBox1->Items->Strings[0])einfacher erscheint mir da
if ( ComboBox1->ItemIndex == 0 )besser (verstaendlicher)
MfG
Klaus