Ich habe diese Funktion:Wie in Funktion Argument eine Zeigerfunktion übergeben mit Wrapper-Funktion?
void boot(uint ncores, uint nterm, Task boot_task, int argl, void* args)
{
for(int i=0; i<MAX_PROC;i++) {
PT[i].ppid = NOPROC;
}
nextproc = 0;
curproc = NOPROC;
Exec(boot_task, argl, args);
}
und und ich möchte stattdessen Exec()
der Verwendung pthread
zu verwenden, so dass ich die cpu_boot nennen:
void cpu_boot(uint cores, interrupt_handler bootfunc, uint serialno)
{
//I cannot change this function
}
Das sind die Typen der Argumente sind
typedef void interrupt_handler();
typedef int (* Task)(int, void*);
ich habe versucht:
void boot(uint ncores, uint nterm, Task boot_task, int argl, void* args)
{
void my_wrapper()
{
int y;
y= boot_task(argl, args);
}
cpu_boot(ncores, my_wrapper , nterm);
}
Aber das ist falsch. Wie kann ich das umsetzen?
Da die beiden Variablen: PT [] und nextproc nicht definiert sind (sind das globale Variablen?) Gibt es ein paar andere Probleme: 1) kann keine nächsten Funktionen in C 2) die typedef-Anweisungen benötigen einen 'trailing'-Namen Verwenden Sie, um das Typedef zu verweisen. 3) das: typedef void interrupt_handler(); ist kein gültiger Prototyp für eine Interrupt-Funktion. das ist: typedef void interrupt_handler (void); als Interrupt-Funktionen können in Parametern nicht übergeben worden sein, da sie nie aufgerufen werden. – user3629249
@ user3629249: Die beiden Typedefs sind 'OK'; Die Namen der Typedefs sind 'interrupt_handler' und' Task'. Die Definition von "interrupt_handler" sollte die akzeptablen Argumente angeben oder "void" angeben, wenn die Funktion keine Argumente annimmt, aber das ist ein (relativ) kleines Problem. Beachten Sie, dass Standardsignal-Handler im User-Space, in denen Pthreads normalerweise verwendet werden, den Typ "void (* handler) (int signum) haben;" - die Funktion benötigt ein Argument. Signalhandler und Interrupthandler werden aufgerufen; sie wären sinnlos, wenn sie nie angerufen würden. –