我定義了一個類A,里面有個函數(shù)void * repairFileThread(void *arg);為什么這樣:pthread_t tid;pthread_create(&tid,NULL,repairFileThread,(void*)NULL);編譯的時候老是:argument of type 'void* (A::)(void*)' does not match 'void* (*)(void*)'如果我把pthread_create(&tid,NULL,repairFileThread,(void*)NULL);改成pthread_create(&tid,NULL,&repairFileThread,(void*)NULL);就會報錯
2 回答

阿波羅的戰(zhàn)車
TA貢獻(xiàn)1862條經(jīng)驗 獲得超6個贊
pthread_create(&tid,NULL,A::repairFileThread,NULL);
線程方法必須是靜態(tài)方法,你如果寫在類里,不能是成員函數(shù),需要加static
這意味著你不能在repairFileThread里訪問A實(shí)例的成員,不過你可以通過參數(shù)傳遞A的實(shí)例
A a; pthread_create(&tid,NULL,A::repairFileThread,a); ..... void * A::repairFileThread( void *arg) { A* a = (A*)arg; a->xxx... } |

動漫人物
TA貢獻(xiàn)1815條經(jīng)驗 獲得超10個贊
因為類的成員函數(shù)經(jīng)過處理會變成含有隱藏this指針的函數(shù),與pthread_create的參數(shù)要求是不符合的,只能把該成員函數(shù)變成靜態(tài)成員函數(shù):static void* repairFileThread(void *arg), 不過仍然可以通過傳遞指針this的方式訪問對象(arg)
- 2 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報
0/150
提交
取消