mam tej funkcji:Jak przekazać do argumentu funkcji funkcję wskaźnika za pomocą funkcji owijki?
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);
}
i i chcę zamiast korzystania Exec()
używać pthread
, więc muszę nazwać cpu_boot:
void cpu_boot(uint cores, interrupt_handler bootfunc, uint serialno)
{
//I cannot change this function
}
Są to typy argumentów
typedef void interrupt_handler();
typedef int (* Task)(int, void*);
Próbowałem:
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);
}
Ale to jest złe. Jak mogę to wdrożyć?
ponieważ dwie zmienne: PT [] i nextproc nie są zdefiniowane (czy są to zmienne globalne?) Jest kilka innych problemów: 1) nie mogą następnych funkcji w C 2) instrukcje typu "wyciągnij" użyj, aby odwołać się do typedef. 3) to: typedef void interrupt_handler(); nie jest prawidłowym prototypem funkcji przerwania. to jest: typedef void interrupt_handler (void); ponieważ funkcje przerwań nie mogły przejść w parametrach, ponieważ nigdy nie są wywoływane. – user3629249
@ user3629249: Dwa typy są "OK"; nazwy typedefs to 'interrupt_handler' i' Task'. Definicja 'interrupt_handler' powinna określać akceptowalne argumenty lub określić' void', jeśli funkcja nie przyjmuje argumentów, ale jest to (względnie) niewielki problem. Zauważ, że standardowe procedury obsługi sygnałów w przestrzeni użytkownika, w której normalnie używane są pthready, mają typ 'void (* handler) (int signum);' - funkcja przyjmuje argument. Obsługiwane są programy obsługi sygnałów i procedury obsługi przerwania; byliby bez sensu, gdyby nigdy nie zostali wezwani. –