Ben bu işlevi vardır:İşlev argümanında sarıcı işlevini kullanarak bir işaretçi işlevi nasıl iletilir?
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);
}
ve ben bunun yerine pthread
kullanmak Exec()
kullanmanın istiyorum, bu yüzden cpu_boot aramak zorunda:
void cpu_boot(uint cores, interrupt_handler bootfunc, uint serialno)
{
//I cannot change this function
}
Bunlar parametre tipleri
typedef void interrupt_handler();
typedef int (* Task)(int, void*);
denedim:
Fakat bu yanlış. Bunu nasıl uygulayabilirim?
iki değişken olduğundan: PT [] ve sonrakiproc tanımlanmamış (bunlar genel değişkenler midir?) Birkaç sorun daha vardır: 1) C 2'de bir sonraki işlevler olamaz) typedef ifadelerinin "sondaki" bir adı olması gerekir. typedef başvurmak için kullanın. 3) bu: typedef void interrupt_handler(); kesme işlevi için geçerli bir prototip değildir. Bu: typedef void interrupt_handler (void); interrupt fonksiyonları hiç bir zaman çağrılmadıkları için parametreler içinde geçemezler. – user3629249
@ user3629249: İki yazım hatası 'Tamam'; typedeflerin adları 'interrupt_handler' ve' Task' dir. 'Interrupt_handler' tanımı kabul edilebilir argümanları belirtmeli veya işlev argüman almazsa 'void' değerini belirtmelidir, ancak bu (nispeten) küçük bir sorundur. Normalde normalde kullanılan pthreads öğelerinin kullanıldığı standart sinyal işleyicileri, void (* işleyici) (int signum) türüne sahiptir; - işlev bir argüman alır. Sinyal işleyicileri ve kesme işleyicileri denir; Hiç çağrılmadıkları takdirde anlamsız olurlar. –