Unterbrechung eines Programmes
-
Hallo Erstmal!
Ich bräuchte eine Funktion FunktionA() dine nur dan ausgeführt wird wenn
FunktionB() den wert 1 zurück liefert.Mein Hauptproblem ist allerdings, dass FunktionA() auch ausgeführt werden,
soll wenn mein Programm gerade etwas anderes abarbeitet, somit soll mein Programm also unterbrochen werden und die FunktionA() abarbeiten und danach wieder an der unterbrochen Stelle wieder weiterarbeiten.Ich habe gehört, dass das irgendwie mit interrupts gehen soll, allerdings weiss ich nicht wie bzw. ob dass wirklich mit interrupts geht.
Mein Compiler: Borland C++ 5.02 @ DOS
-
Glock17L schrieb:
Mein Hauptproblem ist allerdings, dass FunktionA() auch ausgeführt werden, soll wenn mein Programm gerade etwas anderes abarbeitet, somit soll mein Programm also unterbrochen werden und die FunktionA() abarbeiten und danach wieder an der unterbrochen Stelle wieder weiterarbeiten.
ja das ist so eine eigenschaft einer funktion
-
freddy_krüger schrieb:
Glock17L schrieb:
Mein Hauptproblem ist allerdings, dass FunktionA() auch ausgeführt werden, soll wenn mein Programm gerade etwas anderes abarbeitet, somit soll mein Programm also unterbrochen werden und die FunktionA() abarbeiten und danach wieder an der unterbrochen Stelle wieder weiterarbeiten.
ja das ist so eine eigenschaft einer funktion
Was soll das bitte heißen?
-
Glock17L schrieb:
freddy_krüger schrieb:
Glock17L schrieb:
Mein Hauptproblem ist allerdings, dass FunktionA() auch ausgeführt werden, soll wenn mein Programm gerade etwas anderes abarbeitet, somit soll mein Programm also unterbrochen werden und die FunktionA() abarbeiten und danach wieder an der unterbrochen Stelle wieder weiterarbeiten.
ja das ist so eine eigenschaft einer funktion
Was soll das bitte heißen?
Dass deine Beschreibung stark hinkt und man nur vermuten klann, was du wirklich vor hast. Möchtest Du, dass deine FunktiomnA zyklisch aufgerufen wird und dann dein Programm, egal an welcher Stelle es gerade ist, unterbrochen wird?
-
ja genau
-
und sorry wegen der schlechten beschreibung
-
Also grundsätzlich ist es eine Unterbrechung von Funktion A, wenn Funktion B, bei Eintreten einer Bedingung ausgeführt wird und du kehrst auch nach dem abarbeiten von Funktion B zu der aufrufenden Stelle in Funktion A zurück.
Einen zyklischen Aufruf kannst du sehr leicht mit dem Modulo-Operator erzeugen, der es dir ermöglicht z.B. bei jedem 10 Schleifendurchlauf der Funktion A, Funktion B aufzurufen und dannach wieder zurückkehrt.
-
Natürlich gibt es auch die Möglichkeit mit continue, break und goto zu arbeiten um etwas derartiges zu schreiben.
-
Glock17L schrieb:
ja genau
meinst du mit zyklisch auch Zeitlich zyklisch (bsp: immer nach 10 Sekunden) oder so? Dann kannst du einen Timer/Alarm benutzen, ist aber OS abhängig
-
supertux schrieb:
Glock17L schrieb:
ja genau
meinst du mit zyklisch auch Zeitlich zyklisch (bsp: immer nach 10 Sekunden) oder so? Dann kannst du einen Timer/Alarm benutzen, ist aber OS abhängig
Es tut mir leid, dass ich vorher "ja genau" geschrieben habe.
Ich meinte eigentlich einen azyklische Unterbrechung.
-
also jetzt verstehe ich nur Bahnhof, was du willst. Kannst du nochmal genauer erklären, was du willst und vielleicht wieso?
-
Ich will, dass die FunktionA() azyklisch also zu jedem beliebigem Zeitpunkt aufgerufen wird, wenn die FunktionB() den Wert 1 zurückliefert!
Für was ich das Ganze brauche?
Also ich habe Probleme mit dem Maustreiber für BGI.
Der funktioniert nur richtig mit den normalen BGI Treiber, ansonsten gibt es zur Laufzeit einen Fehler aus, sobald man die Maus anzeigen will.Da ich allerdings svg256.bgi mit 1024x768 verwenden will, muss ich die Maus selber ausgeben.
Da es ziemlich umständlich ist immer nach einer gewissen Zeit eine Funktion
aufzurufen, die die Maus ausgibt falls sich die Position ändert. Habe ich mir überlegt ich bräuchte eine solche Funktion.
-
Von wo aus rufst du denn FunktionB() auf? An der Stelle kannst du auch den Rückgabewert überprüfen und entsprechend reagieren:
if(Funktionb()==1) FunktionA();
-
Müsste die Problemstellung nicht lauten "Ich will, dass immer dann FunktionA aufgerufen wird, wenn FunktionB zu diesem Zeitpunkt 1 zurückliefern würde"?
Denn ansonsten könnte der Unbedarfte antworten: "Ja, dann mach das doch. Einen Vergleich gegen 1 wirst Du noch hinbekommen". Und das würde zu der Antwort von CStoll führen...
-
ok hier ein Beispiel:
int main() { int irgendwas; // Vielleicht liefert jetzt FunktionA() 1 zurück und Funktion B() sollte aufgerufen werden irgendwas = 0; // oder vielleicht hier irgendwas = 123; // oder vielleicht hier pritnf("HALLO %d", irgendwas); //<<-- oder vielleicht während dem Aufruf von printf() // oder vielleicht hier getch(); //<<-- oder vielleicht während dem Aufruf von getch() }
Ich könnte auch eine Funktion schreiben die das immer in jeder Zweiten Zeil abprüft.
aber:
1. Wird der Code unlesbar
2. Ist der Code Umständlich
3. Kann ich das nicht innerhalb von Bibliotheksfunktionen z.B.:(getch()) abfragenalso brauche ich eine Funktion, welche dies alles im "Hintergrund" abprüft!
-
Kuck-kuck !
Glock17L schrieb:
...
Mein Hauptproblem ist allerdings, dass FunktionA() auch ausgeführt werden,
soll wenn mein Programm gerade etwas anderes abarbeitet, somit soll mein Programm also unterbrochen werden ...Also FunktionA und eine andere Funktion machen quasi gleichzeitig etwas ?
Das hört sich stark nach Threads an !
-
proggingmania schrieb:
Das hört sich stark nach Threads an !
weil :
Glock17L schrieb:
Mein Compiler: Borland C++ 5.02 @ DOS
(Falsches Forum -> MS-DOS)
Glock17L schrieb:
Für was ich das Ganze brauche?
Also ich habe Probleme mit dem Maustreiber für BGI. Der funktioniert nur richtig mit den normalen BGI Treiber ...Eventuell hilft ein neuer (alter) Maustreiber :
http://ftp2.ua.freebsd.org/pub/msdos/drivers/mouse/hgxmou10.zip
-
merker schrieb:
proggingmania schrieb:
Das hört sich stark nach Threads an !
weil :
Weil dein Problem darauf hinausläuft, daß du zwei Sachen parallel zueinander erledigen willst - die Arbeit des Hauptprogramms und die ständige Überprüfung
if(FunktionB()) FunktionA();
- so eine Konstellation schreit geradezu nach Multi-Threading.
-
Glock17L schrieb:
Also ich habe Probleme mit dem Maustreiber für BGI.
das hört sich sehr nach DOS an.
unter DOS könnteste ja den maus-interrupt benutzen, dann hast du ja, was du willst: jedesmal wenn einer die maus bewegt, wird eine funktion aufgerufen...
-
... oder den Timer-Interrupt. Dann wird die Funktion "ständig" ausgeführt.