簡體   English   中英

在構造函數中創建線程

[英]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擺脫了這個問題。 但由於兩個原因,我不想這樣做:

  1. 創建具有靜態函數的線程僅意味着該函數的1個副本。
  2. 該線程在構造函數中創建。 我不知道如果創建多個C類對象會發生什么。

有人可以給我解決方法嗎?

解決:感謝您的幫助! 另外,一個很好的建議是對於將來的用戶首選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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM