Senden von Signalen mit einer bestimmen Pause
-
Hallo C++ Community,
ich Programmiere mit der Entwicklungsumgebung Visual Studio 2013.
Nun zu meiner Frage:
-Mit einem Button "Run" Sende ich Signale mit einer bestimmten Wiederholungsdauer an ein Messgerät.
-Zwischen den Wiederholungen findet eine einstellbare Pause statt.
-Diese Pause Realesiere ich bisher mit dem untypischen Befehl Sleep
-Das Problem hierbei ist, das der Sleep Befehl das Programm für die eingestellte Pause einfriet.(Ist ja auch klar da der aktuelle Thread benutzt wird)
-Da die Pausen oft mehr als eine Sekunde lang sind und die Wiederholungsraten mehr als 50 Wiederholungen betragen lässt sich so das Programm nicht mehr stoppen für diese ZeitDa ich nicht fitt in Multithreading bin wollt ich euch einmal frage ob ihr eine Idee habt wie ich eine Pause realesieren könnte ohne das, dass Programm dabei "schläft":
Viele Dank schon einmal für eure Hilfe
-
Nimm einfach einen Timer.
-
Oder erzeuge eine Thread, der Sleep ausführt. Aber führe eine Flag ein, mit der dieser Thread überprüft, ob er noch Messen soll.
-
Vielen Dank für die schnelle Antwort
Bisher ist der Code folgender:
[private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{button3->BackColor = System::Drawing::Color::Crimson;
String^ W0 = numericUpDown1->Text;
Int16 W1 = Convert::ToInt16(W0); //WiederholungenString^ S0 = numericUpDown2->Text;
Int16 S1 = Convert::ToInt16(S0); //Pauseneinstellungfor (Int16 i = 0; i < W1; i++)
{
Int16 Ausgabe1 = i +1;
String^ Ausgabe2 = Convert::ToString(Ausgabe1);
label43->Text = Ausgabe2;
mySerialPort->Write(":PULSE0:STATE ON\r\n");
textBox19->Text = mySerialPort->ReadExisting();
Sleep(S1);
}mySerialPort->Write(":PULSE0:STATE OFF\r\n");
button3->BackColor = System::Drawing::Color::SlateGray;
}]Haben Sie eine Idee wie ich den Timer so einfüge das auch wirklich eine Pause herunter gezäht wird?
-
Kannst du "nicht schlafen" genauer definieren? Was soll er denn stattdessen machen?
-
Falsche Sprache oder falsches Forum. C++ != CLI
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo nwp3,
"nicht schlafen" soll in dem Fall sein das ich mit einen z.B. anderen Button das die Schleife verlassen kann.
Dies ist ja zur Zeit nicht möglich da ja das Programm bei dem Sleep Befehl einfriet.
Vielen Dank für die Hilfe
-
Hallo Community,
-ich habe versucht mal eine extra Thread aufzubauen worin die Sleep Funktion ausgeführt werden soll.
-Das Problem ist das, immer noch mein Programm während der Sleep Funktion einfriert und ich z.B die Schleife nicht abbrechen kann.
Der code
ref class Work
{
private:
Work(){}public:
static void DoWork()
{
}};
/// <summary>
/// Zusammenfassung für Spur1
/// </summary>public ref class Spur1 : public System::Windows::Forms::Form
{
public:
Spur1.....private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
button3->BackColor = System::Drawing::Color::Crimson;Thread^ newThread = gcnew Thread(gcnew ThreadStart(&Work::DoWork));
newThread->Start();String^ W0 = numericUpDown1->Text;
Int16 W1 = Convert::ToInt16(W0); //WiederholungenString^ S0 = numericUpDown2->Text;
Int16 S1 = Convert::ToInt16(S0); //Pauseneinstellungfor (Int16 i = 0; i < W1; i++)
{
Int16 Ausgabe1 = i +1;
String^ Ausgabe2 = Convert::ToString(Ausgabe1);
label43->Text = Ausgabe2;
mySerialPort->Write(":PULSE0:STATE ON\r\n");
textBox19->Text = mySerialPort->ReadExisting();
Thread::Sleep(S1);
}mySerialPort->Write(":PULSE0:STATE OFF\r\n");
button3->BackColor = System::Drawing::Color::SlateGray;
}
-
Sorry TriHil, aber beschäftige dich ersteinmal mit den Grundlagen bevor du mit C++/CLI (und dann noch in Verbindung mit WinForms) arbeitest, s.a. Windows Forms und Visual C++ MACHT KEINEN SINN!
Überlege mal, wieso du beim Thread-Start die Methode Work:DoWork angegeben hast?
Da C# sowieso die (bessere) Sprache für .NET ist, hier ein paar Artikel (aus dem myCSharp-Forum) dazu:
[FAQ] Warum blockiert mein GUI?
[Artikel] Multi-Threaded Programmierung
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)P.S: Und formatiere deinen Code hier im Forum mittels der entsprechenden Buttons!