2016-07-06 158 views
0

我一直在試圖學習如何使用線程,並且我在創建一個時遇到困難。我在線程得到一個類的構造函數這樣創建...pthread_create - 無效使用非靜態成員函數

Beacon::Beacon() { 
    pthread_create(&send_thread,NULL, send, NULL); 
} 

發送函數是沒有做任何事情,但這裏是什麼樣子。

void Beacon::send(void *arg){ 
    //Do stuff 
} 

每次我運行代碼時,我都會得到非靜態成員funciton錯誤的無效使用。我試過使用&發送,並沒有工作。我也有最後一個NULL參數設置爲此,但沒有奏效。我一直在尋找其他示例代碼來嘗試和嘲笑它,但似乎沒有任何工作。我究竟做錯了什麼?

+2

非常簡化的,所有的非成員函數具有成爲'this'可變隱藏第一個參數。我建議你考慮一下['std :: thread'](http://en.cppreference.com/w/cpp/thread/thread)。 –

回答

4

如果您不能使用std::thread我建議您創建一個static成員函數來包裝您的實際功能,並將this作爲參數傳遞給函數。

喜歡的東西

class Beacon 
{ 
    ... 

    static void* send_wrapper(void* object) 
    { 
     reinterpret_cast<Beacon*>(object)->send(); 
     return 0; 
    } 
}; 

然後創建線程等

pthread_create(&send_thread, NULL, &Beacon::send_wrapper, this);