funktionen voruebergehend "sperren"
-
hi
habe ne frage
ich habe eine fkt die immer aufgerufen hat, falls ich was trace
jetzt habe ich einen break button und wenn der geklickt wird, darf nichts mehr getraced werden.
kann ich die kft. dann voruebergehend deaktivieren??
habe die fkt uebernommen
static int CALLBACK OnlineCallBack(int nStatus, strTraceMessageData* pTraceData, void* pWnd);ich rufe mit START den tracevorgang auf
wenn ich jetzt break mache ( traced er im hintergrund weiter )
das kann ich endweder verhindern
a. ich verhindere die callback fkt
b. ich "kille" die fkt die in start stehtkann mir da einer helfen, wie ich das mache
klar ich kann noch ne variable einfuehren die dann in der startbutton fkt die fkt "deaktiviert" weil die dann true ist oder so
aber gibs da was besseres?
ich glabue die callback wird trozdem ausgefuehrt. hmmmweare aber trozdem "cool" zu wissen ob man sowas "blocken" kann
-
Nun, ich vermute du hast die Funktion "message mapped" oder? Ich weis zwar nicht wie man eine Funktion aus der Karte dynamisch löscht aber die Idee mit einer neuen Variable könnte in jeden Fall eine optimale Lösung sein... Versuche eine "if" Aussage in die message map hineinzustecken, vielleicht funktioniert es ja - ich habe es noch nie probiert aber dennoch...

-
hm, also ich würde schon sagen, dass das nur über eine globale Variable geht, die Du in der Funktion überprüfst. Nennen wir sie mal (bool) bDoWork. In der Buttonfunktion setzt Du sie true oder false.
Erste Zeile in der Funktion:
if (DoWork) { // Funktion ausführen }Wenn in einer Schleife:
// vor der Schleife. Falls Du schon einen eigenen Zähler in der Schleife hast, kannst Du auch den nehmen. int iloopcount; // in der Schleife // Botschaften verarbeiten if (!DoWork) break;Ich hoffe das war jetzt nicht zu simpel als Antwort, aber ich hab' nur mal aus dem BCB-Lager rübergeschnuppert und mir nicht die Mühe gemacht mir Deine anderen Postings hier anzusehen und Deinen Wissenstand einzustufen. Also nichts für ungut, bitte.
Ach so, dass mit dem BCB-Lager ist auch der Grund, warum da nur steht // Botschaften verarbeiten. Ich weiß nicht mehr, wíe es mit API-Mitteln geht. Hab' ich verdrängt, im BCB ist's einfach Application->ProcessMessages();
.Grüße
-
hmmm weiss auch nicht wie ich es am besten loesen soll
jep wird halt so gemacht
MSG message; if (::PeekMessage(&message,NULL,0,0,PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); }das prob ist ich init die externe hardware
am anfang in der start fkt und am schluss ( wenn halt alles fertig ist dann )
nRet=InitiateDriver(cNoMode); //::MessageBox(NULL, "Trace Mode disabled", "Tracii", MB_OK);also koennte ich ja bei break auch nRet=InitiateDriver(cNoMode); machen, dann muss ich wieder alles init. bei atart
da wird aber auch ne textfile generiert
dann muss ich das auch unterbinden dass nur das board init. wird und nicht die text
und so weiterdeswegen dachte ich ( mach dir keinen stress ) maybe weiss jemand wie ich sowas mache wie
blablabla_disable(fkt_x); und dann balbalbal_enable(fkt_x);
-
Ich denke das beste wäre dass du eine variable erschaffst - einen Zeiger, der die Adresse der Funktionen beinhaltet. Du musst dann nur den Zeiger ändern. Z.B. eine globale variable: void (*zeger_zu_fnkt)(parameters)=blabla_enabled; etc.
-
Squeel schrieb:
Ich denke das beste wäre dass du eine variable erschaffst - einen Zeiger, der die Adresse der Funktionen beinhaltet. Du musst dann nur den Zeiger ändern. Z.B. eine globale variable: void (*zeger_zu_fnkt)(parameters)=blabla_enabled; etc.
Ich habe ein Paar Fehler gemacht (nicht nur Grammatikalische ;)):
// Ein Zegier zu einer Funktion (Deklaration) int (*funktZeiger) (int Parameter) = (int(__cdecl*)(int Parameter))&blablabla_enabled; // Ruf der funktion (*funktZeiger)((int)EINE_NUMMER);Ich hoffe es klappt, ich habe es nicht ausprobiert... habe es schon lange nicht benutzt...