Polling
-
Hallo,
ich möchte gerne zyklisch bestimmte Befehle abarbeiten.
Habe es schon mit Timer probiert aber leider ohne Erfolg.
Eigentlich ganz einfach, nach dem Laden meiner Form soll
in einem bestimmten Intervall immer
void x(){ //do something}aufgerufen werden.
Habt ihr da irgendwelche Ideen?
-
Warum klappt es mit einem Timer nicht ?
-
Du musst den Timer auch starten...
-
mittlerweile geht es mit dem Timer (ok)
Aber leider sieht es jetzt so aus:
Ich rufe mit dem Timer meine Funktion poll() auf.
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { poll(); label4->Text = "Ticks: " +ticks; ticks++; }
Timer starte ich bei Load:
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { s->Connect( host, port ); timer1->Start(); }
und poll() sieht so aus:
static int byteCount; static array<byte>^ recv_comp = gcnew array<byte>(10); static int i = 1; static int ir = 1; public: void poll() { //s->Connect( host, port ); label2->Text= "Poll Call"+ i; array<byte>^ fc1b = {53,0,0,0,0,8,1,1,0,1,0,1,221,152}; s->Send(fc1b); i++; array<byte>^ recv = {53,0,0,0,4,1,1,1,1}; byteCount = s->Receive(recv_comp); if(byteCount > 0) { int val = System::Convert::ToInt32(recv->GetValue(8)); int valon = System::Convert::ToInt32(recv_comp->GetValue(9)); label1->Text = valon.ToString(); label3->Text = "Recieved: " + ir; ir++; if(val.Equals(valon)) { //alles aus! label2->Text = "alles aus!"; array<byte>^ msg = {53,0,0,0,0,17,1,15,0,0,0,80,10,0,0,0,0,0,0,0,0,0,0}; s->Send(msg); //timer1->Stop(); //timer1->Start(); }
auf den Labels sehe ich nun ja auch, dass poll usw die ganze zeit immer wieder aufgerufen wird, aber leider verstehe ich nicht, warum send nur ein mal ausgeführt wird.
klar,eigentlich sollte es anstatt
if(val.Equals(valon))so heißen:
if(val = valon)Frage: Warum geht das überhaupt?
Test jetzt mit if(val = valon).
Hier wird send öfters ausgeführt, aber nicht dann wann es eigentlich soll.Ich vermute den Fehler wohl bei.
static array<byte>^ recv_comp = gcnew array<byte>(10);Muss ich das array wieder freigeben / löschen nach dem gebrauch?
Wenn ja wie?mfg
-
gelöst: habe das array größer gemacht.