Unterbrechung eines Programmes
-
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.
-
merker schrieb:
Eventuell hilft ein neuer (alter) Maustreiber :
http://ftp2.ua.freebsd.org/pub/msdos/drivers/mouse/hgxmou10.zipJa hab ich schon ausprobiert, aber der funktioniert bei mir nicht.
Daher möchte ich gerne wissen wie das mit den Interrupts funktioniert.
-
-
ok offensichtlich funktoniert hgx mouse doch bei mir allerdings kann ich die maus nur in einem gewissen bereich bewegen!
bitte probiert es einmal aus!
Hier noch Dateien die man benötigt(einfach ins gleiche verzeichnis kopieren wie die main.cpp und mouse.h)
HGXMOUSE DOWNLOAD//main.cpp #include <conio.h> #include <dos.h> #include <graphics.h> #include <stdio.h> #include <stdlib.h> #include "mouse.h" void InitializeGraphMode(void); huge svgamode(void); int hgxInit(void); void main() { InitializeGraphMode(); system("HGXMOUSE.EXE"); hgxInit(); InitMouse(); HideM(); setfillstyle(SOLID_FILL, LIGHTGRAY); bar(0,0,getmaxx(),getmaxy()); ShowM(); getch(); } void InitializeGraphMode(void) { int GraphDriver = DETECT; int GraphMode; int ErrorCode; installuserdriver("svga256", svgamode ); initgraph( &GraphDriver, &GraphMode, "" ); ErrorCode = graphresult(); if( ErrorCode != grOk ) { printf(" Graphik System Fehler: %s\n", grapherrormsg( ErrorCode ) ); getch(); exit( 1 ); } } huge svgamode(void) { return 4; } int hgxInit(void) { union REGS regs; regs.x.ax = 0x4500; regs.x.si = getmaxx()+1; // X resolution regs.x.di = getmaxy()+1; // Y resolution regs.h.bl = 0; // MODE_P8 regs.x.dx = getmaxx()+ 1; // Bytes per line int86(0x33, ®s, ®s); return ((regs.h.al == 0x45) ? 1 : 0); }
//mouse.h #define NO_BUTTON 0 #define BUTTON_LEFT 1 #define BUTTON_RIGHT 2 #define BUTTON_BOTH 3 void GrenzenX(int x1,int x2); void GrenzenY(int y1,int y2); void InitM(void); void HideM(void); void ShowM(void); int GetMx(void); int GetMy(void); int MHit(void); void InitHand(void); REGS re; struct REGPACK reg; int MMode; void GrenzenX(int x1,int x2) { re.x.ax=7; re.x.cx=x1; re.x.dx=x2; int86(0x33,&re,&re); } void GrenzenY(int y1,int y2) { re.x.ax=8; re.x.cx=y1; re.x.dx=y2; int86(0x33,&re,&re); } void InitMouse(void) { reg.r_ax=0; intr(0x33,®); reg.r_ax=1; intr(0x33,®); } void HideM(void) { reg.r_ax=2; intr(0x33,®); } void ShowM(void) { reg.r_ax=1; intr(0x33,®); } int GetMx(void) { reg.r_ax=3; intr(0x33,®); return(reg.r_cx); } int GetMy(void) { reg.r_ax=3; intr(0x33,®); return(reg.r_dx); } int MHit(void) { reg.r_ax=3; intr(0x33,®); return(reg.r_bx); }
-
Habs zwar nicht ausprobiert, aber Du solltest nach "InitMouse ()" den Bereich noch einstellen :
... InitMouse (); GrenzenX (1,639); // horz : 640 GrenzenY (1,479); // vert : 480 ...oder wie auch immer :-) ...
-
merker schrieb:
Habs zwar nicht ausprobiert, aber Du solltest nach "InitMouse ()" den Bereich noch einstellen :
... InitMouse (); GrenzenX (1,639); // horz : 640 GrenzenY (1,479); // vert : 480 ...oder wie auch immer :-) ...
nö funktioniert nicht!
-
Was liefert "MOUSTEST.EXE" ?
-
moustest.exe ist nur zum testen der maus bei einer auswählbaren treiber und auflösung und daher unwichtig für mich