2012-08-06 51 views
2

我有一個由thread.this函數調用的函數,它有一個唯一的參數,它是queue :: my_queue。所以,我需要在由線程調用的方法執行對空指針鑄造如下:void *在調度線程時拋出指針

void *AddPacket(void *Ptr) 
{  queue<int> my_queue = (queue*)Ptr ; 
     my_queue.push(byte) ; 
} 

,並在主,我做的:

int main() 
{ // do business 
    pthread_create(&thread, NULL, &AddPacket, (void*)queue) ; 
} 

但是轉換都錯了。

第一轉換導致錯誤:

請求部件在「my_queue」「推」,其是非類類型「隊列*」

,第二個組成:

從類型'隊列'無效投射到類型'void *'

我該如何解決問題?

回答

3

嘗試:

queue<int> *my_queue = (queue<int> *)Ptr ; 
my_queue->push(byte) ; 

pthread_create(&thread, NULL, &AddPacket, (void*)&queue) ; 

..東西沿着這些線路,反正

3

您嘗試投對象類型指針類型。不允許。我猜你是新的C++,所以我張貼在這裏糾正代碼unpuzzle你,讓你去,但請閱讀一本書上C++:

queue<int>* my_queue = (queue<int>*)Ptr ; 
my_queue->push(byte) ; 

pthread_create(&thread, NULL, &AddPacket, &queue) ; 

請務必閱讀關於C指針++ :)

+2

..needs點更改爲 - >以及。 – 2012-08-06 20:51:46

+0

哦,對。謝謝。增加了 – 2012-08-06 20:53:25

1

您需要更改這兩個線程函數和創建線程:

// thread entry point: 
void *AddPacket(void *Ptr) 
{ 
    reinterpret_cast<std::queue<int>*>(Ptr)->push(byte); 
} 

// thread creation: 

std::queue<int> q; 
pthread_create(&thread, NULL, &AddPacket, &q); 
//          ^^^^ **pointer** to "q"; 
//          conversion to void* is implied 
+0

我會在裏面添加一些'assert'以達到很好的效果。 – marko 2012-08-06 21:00:59