C++ - Funktion abbrechen

Ich habe zwei Elementfunktionen einer Klasse. Die erste nennt sich Start() und die zweite Stop():

Code:
void C::Start(void)
{
    while (1) do_something();
}
void C::Stop(void)
{
   // stop...
}

Die Funktion Stop soll die Start Funktion abbrechen lassen. Allerdings nicht durch irgendeine Variable, die dauernd geprüft werden soll (z.B. while(stopped) ;;).

Wie ist das realisierbar?

Danke schonmal im voraus,
acdc
 
Warum nicht statt while(1) eine Abfrage while(!stop)?
Und dir ist auch bewusst, dass du in einem Thread nicht zwei Funktionen gleichzeitig abarbeiten kannst (Ausnahme: BCB mit Application->ProcessMessages oder so ähnlich, Pseudo-Multithreading)?

mfg benediktibk
 
Original von benediktibk
Warum nicht statt while(1) eine Abfrage while(!stop)?

Ich hatte doch schon geschrieben, dass ich keine Abfrage ? la "while(!stop)" haben möchte.

Original von benediktibk
Und dir ist auch bewusst, dass du in einem Thread nicht zwei Funktionen gleichzeitig abarbeiten kannst (Ausnahme: BCB mit Application->ProcessMessages oder so ähnlich, Pseudo-Multithreading)?

Ich kann mich nicht entsinnen, geschrieben zu haben, dass beide Funktionen in einem Thread abgearbeitet werden.

Aber trotzdem danke für deine Antwort.
 
Original von acdc
Die Funktion Stop soll die Start Funktion abbrechen lassen. Allerdings nicht durch irgendeine Variable, die dauernd geprüft werden soll (z.B. while(stopped) ;;).

Wie ist das realisierbar?

Was genau ist dein Ziel?

Ich kann deinen Ansatz nachvollziehen, vermutlich ist dir das ständige Abfragen einer Variable zu umständlich und der Code ist schlecht wiederverwendbar. Das Problem ist jedoch: was passiert, wenn deine Funktion z.B. gerade etwas in eine Datei schreibt oder andere "kritische" Aktionen durchführt? Bist du dir sicher, dass du die Funktion aprupt ohne vorherige Prüfung beenden möchtest?
 
Dafuer eignet sich wunderbar das Observer-Muster.(siehe auch Publish`n`Subscribe).

//edit
wenn du es richtig anstellst hast du auf diesem Weg auch nicht das Problem mit kritischen Operationen.
Mit Multithreads habe ich nicht so die Erfahrungen, kannst das Muster aber mit sicherheit uebertragen.
@xrayn
mutexes,semaphoren und dergleichen sind nur bei kritischen Bereichen interessant, helfen hier aber nicht, und wenn dann ist das Konstrukt sehr komplex.
 
Naja, fuer mich ist jeder Bereich kritisch der einer Synchronisation bedarf, ABER
wenn ich eine Synchronisation will, muss das kein kritischer Bereich in meinem Programm sein. ;)

Du kannst es dann zwar so machen, aber bei nicht kritischen Bereichen kann es sich anbieten was anderes zu machen, wie das ganze daten-/eventgetrieben zu modellieren.

//edit
Mal ganz davon ab das es hier nicht um synchronisation im eigentlichen Sinne geht.
 
Zurück
Oben