2009-02-24 129 views
2

如何時,保存爲」 .c和使用的C編譯器就可以了。但在C++中,它是給錯誤運行實現Linux下C POSIX線程++。該SMME程序..Posix線程在C++

我想我做到編譯 時犯的錯誤是沒有被列入類似「-lpthread」爲C++

可有人請發送一個有效的代碼...任何標記?

其實這是我的代碼

int cooperbussman :: startlistenthread() 
{ 
     if(pthread_create(&m_thread,0,&packetreadertask,0)<0) 
     { 
       cout<<"Unable to create the thread Startlistenthread\n"; 
       return -1; 
     } 
     return 1; 

和我得到的錯誤是

 
cooperbussman.cpp: In member function âint cooperbussman::startlistenthread()â: 
cooperbussman.cpp:76: error: invalid conversion from âvoid* (*)()â to âvoid* (*)(void*)â 
cooperbussman.cpp:76: error: initializing argument 3 of âint pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)â 
+0

既然你對堆棧溢出,唐是新忘記「接受」最有用的答案(點擊答案左側的綠色複選標記)。 – 2009-02-24 03:58:58

回答

5

您的packetreadertask函數必須是以單個void *作爲參數的函數。這是最重要的錯誤消息:

cooperbussman.cpp:76: error: invalid conversion from âvoid* (*)()â to âvoid* (*)(void*)â 

你的函數聲明是這樣的:

void *packetreadertask(); 

它必須是:

void *packetreadertask(void *); 
+1

謝謝亞爾..它的工作......再次感謝.... – Chaithra 2009-02-24 03:56:44

4

您可能會考慮使用Boost.Threads。它通過支持C++的平臺在pthread上爲您提供了一些簡單的語義。

但是......沒有理由不能在C++程序中使用pthreads。你的錯誤可能是由於符號混亂造成的,但是如果沒有看到你的代碼或至少是你的編譯器輸出,我們沒有辦法更準確地幫助你。

2

使用g ++時使用-lpthreads就像使用gcc一樣。只要你不試圖使用非靜態成員函數指針作爲線程,那麼pthreads應該可以在C++中正常工作。