• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Callback Funktionen

Jesus0815

Guest
Hi,

ich brauch mal wieder das Wissen unserer Informatik-Götter.
Es geht um folgendes:
Für mein aktuelles Projekt brauch ich die sog. "Callback-Funktionen". Als Einstieg muss ich zunächst einmal "hotkeys" basteln. Wie schaffe ich es das ich per Knopfdruck auf der Tastatur eine bestimmte Funktion ausführen lasse? Während ich gespannt auf eure Antworten warte, google ich derweil mal weiter :)

Grüße
 
Mitglied seit
01.09.2008
Beiträge
1.201
Reaktionen
0
Öhm Tastaturlistener und bei der jeweiligen Taste halt nen Funktionsaufruf rein?
Das hat wenig mit Callback zu tun.

Glaube eher du hast dein Prob nicht allzu gut beschrieben. Welche Sprache könnte auch interessant sein.
 

Jesus0815

Guest
Erm, ja da hast du recht. Ist keine Callback Funktion habe ich mir eben von 'nem Kollegen sagen lassen; bin in dem Bereich noch nicht so fit. Geschrieben wird das ganze in C.
 
Mitglied seit
02.08.2002
Beiträge
1.000
Reaktionen
0
in welcher Sprache =?

in C:


h File:
typedef int ICallBackFunction(int parameter);

struct PseudoKlasse{
int parameter;
ICallBackFunction* piCallBackFunction
}

c File:

ICallBackFunction ichWilleineFunktionWerden;

int ichWilleineFunktionWerden(int parameter)
{
Funktionsdeklaration;
}

struct PseudoKlasse test;
test.piCallBackFunction = ichWilleineFunktionWerden;

Aufruf:
test.piCallBackFunction(integer);


Ich glaub meine Erklärung stinkt, aber vieleicht hilfts dir ja...

Ich versteh nicht so ganz warum du für nen Tastendruck ne Callback Funktion willst?
 
Mitglied seit
02.08.2002
Beiträge
1.000
Reaktionen
0
ich glaube was du willst ist mehr ein getChar und dann ein switch case. Je nach Tastendruck soll dann eben ne andere Funktion aufgerufen werden?
 

Jesus0815

Guest
Das war ein Verständnissproblem meinerseits. Danke für deinen Code. Wo definiere ich da aber welcher Button welche Funktion zur Folge hat?
 
Mitglied seit
02.08.2002
Beiträge
1.000
Reaktionen
0
kann es sein das dass was du willst sowas ist:

if(_kbhit())
{
int u8Temp = getch();
switch(u8Temp)
{
case 'a': funktion1;
break;

case 'b': funktion2;
break;
...
default:
}
}


Sowas=?

Viele grüße
Johannes
 

Jesus0815

Guest
Jaaaa, genau sowas :D
Magste mir noch paar Worte dazu sagen? Bin wie gesagt der totale Anfänger in dem Bereich.
 
Mitglied seit
01.09.2008
Beiträge
1.201
Reaktionen
0
Bei dem letzten Code wird einfach abgefragt ob das keyboard "gehittet" wurde und dann wird mit der funktion getch() (nicht ansi C afaik) der Tastendruck abgefangen und in eine Variabel gespeichert. Diese wird in einer switch-case anweisung einfach abgefragt und je nach Taste wrd eine Funktion ausgeführt.

Unter folgendem Link findest du Beispiele zu _kbhit() (und _getch()):
_kbhit()

getch() fängt einfach nur Tastatureingaben ab, d.h. die Eingabe wird afaik nicht in der Console angezeigt.

Najo und Switch-Case sollte ja klar sein.

Afaik ist das kein ANSI-C und daher kp wie das mit deiner Toolchain kompatibel ist.

Bitte korrigieren falls ich mich irre :p aber ich denke der Link sollte das das Prinzip genug erklären.
 
Mitglied seit
01.06.2007
Beiträge
761
Reaktionen
0
Ich benutze dazu die Winapi Funktionen GlobalAddAtom() und RegisterHotKey(). Letztere Funktion nimmt als ersten Parameter einen Window Handle, d.h. du musst dir noch ein Window erstellen (oder ein vorhandenes re-usen z.B. mit FindWindow()) und per SetWindowLong() darauf deinen Callback als WindowProc setzen.

Codebeispiel hab ich nicht, weil ich das ganze mit JNI (bzw. JNative) und Java mache.
 

ROOT

Technik/Software Forum, Casino Port Zion
Mitglied seit
17.11.2002
Beiträge
7.052
Reaktionen
38
Ort
MS
Naja, sowas macht doch eigentlich sowieso meist nur unter GUI-Programmen Sinn. Und da stellen die meisten Libraries entsprechende Eventhandler zur Verfügung bzw. auf deren Basis kann man das leicht selbst implementieren.

getchar funktioniert m.E. nur wenn man die Eingabe mit Enter abschließt, ist es das was du willst?

Und was Callbackfunktionen angeht hat JJ recht, sowas implementiert man am sinnvollsten über Funktionszeiger. Vorsicht hier bei Memberfunktionen, da solltest du noch einen Zeiger auf das Objekt mitliefern und entsprechend casten.
 
Mitglied seit
02.08.2002
Beiträge
1.000
Reaktionen
0
also dazu was sagen, ich weiß nicht was ;)

Google einfach nach den schlagwörtern die du nicht verstehst, dann findest immer echt gute Anleitungen dazu :)
 

Jesus0815

Guest
also danke erstmal, das hab ich gerafft und funzt auch wunderbar.

als nächstes wollte ich das durch drücken eines buttons x prozess y aufgerufen wird. ich dachte ich könnte das mit fork() und exec() im childbaum realisieren. nur unter windows scheint das nicht zu funktionieren. gibt es hier für alternativen?

schonma danke im vorraus
 
Oben