這裏是一個小例子,其示出了我的問題通函數指針給pthread_create,(C)
test.c的:
#include <stdio.h>
#include <pthread.h>
#define CORES 8
pthread_t threads [ CORES ];
int threadRet [ CORES ];
void foo()
{
printf ("BlahBlahBlah\n");
}
void distribute (void (*f)())
{
int i;
for (i = 0; i < CORES; i++)
{
threadRet [ i ] = pthread_create (&threads [ i ], NULL, f, NULL);
}
for (i = 0; i < CORES; i++)
{
pthread_join (threads [ i ], NULL);
}
}
int main()
{
distribute (&foo);
return 0;
}
VIM/GCC輸出:
test.c:20|11| warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
/usr/include/pthread.h:225|12| note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)()’
什麼*
/&
,我需要添加/刪除PA ss foo
到distribute
然後將它傳遞給線程?
@DavidSchwartz我不跟隨 – puk 2012-07-11 02:18:02
@puk:線程啓動程序必須採取'無效*'作爲參數,也必須返回一個'無效*'。你無法繞過這個要求。要調用'pthread_create',那就是你需要的函數類型,因爲這是它可以調用的唯一函數類型。 – 2012-07-11 02:18:48
@DavidSchwartz:yup - 修正了你在評論的時候(雖然我在發佈原始版本的答案後記得返回類型)。謝謝。 – 2012-07-11 02:19:05