[英]Thread creation inside constructor
所以,我使用的是C ++ 11,我做了一個類
Class C
{
private:
queue<std::int> s;
pthread_t x;
public:
C() {phthread_create(&x, NULL, d_q, NULL);
void log(int p); // pushes into q.
void* d_q(void* q); // this is a function which will pop s. assume s is thread safe.
}
問題是行pthread_create(&x, NULL, d_q, NULL)
。 它給我Error: Reference to non-static member must be called.
我通過使pthread_t x static
擺脫了這個問題。 但由於兩個原因,我不想這樣做:
有人可以給我解決方法嗎?
解決:感謝您的幫助! 另外,一個很好的建議是對於將來的用戶 , 首選std :: thread而不是pthread!
至於你的問題,你指向一個(非靜態)成員函數是不一樣的指針的成員函數。 非靜態成員函數需要調用對象的實例。
有兩種方法可以解決此問題:如果您堅持使用POSIX線程函數,則可以制作一個static
包裝器函數,將該實例作為參數傳遞給線程,然后在靜態包裝器函數中使用該對象調用實際函數。通過了。
另一種解決方案是使用std::thread
,這將使它變得更加容易:
class C
{
std::thread thread_;
...
public:
C() : thread_(&C::d_q, this) {}
...
void d_q() { ... }
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.