2011-11-28 17 views
5

Próbuję mieć klasę, która po utworzeniu rozpoczyna wątek tła, podobny do tego poniżej:boost :: thread obrębie klasy

class Test 
{ 
    boost::thread thread_; 
    void Process() 
    { 
    ... 
    } 

    public: 
    Test() 
    { 
     thread_ = boost::thread(Process); 
    } 
} 

nie mogę zmusić go do kompilacji, błąd to "Brak pasującej funkcji dla wywołania boost :: thread :: thread (nierozpoznany typ funkcji)". Kiedy robię to poza klasą, działa dobrze. Jak mogę uruchomić wskaźnik funkcji?

Odpowiedz

6

Należy zainicjować thread_ jak:

Test() 
    : thread_(<initialization here, see below>) 
{ 
} 

Process to metoda członek niestatyczny klasy Test. Możesz:

  • zadeklarować Process jako statyczny.
  • powiązać instancję testową, aby wywołać Process na.

Jeśli zadeklarujesz Process jako statyczną, inicjator powinien być tylko

&Test::Process 

W przeciwnym razie, można powiązać wystąpienie Test użyciu Boost.Bind:

boost::bind(&Test::Process, this) 
0

Dodać metoda statyczna Process:

static void Process() 
    { 
    ... 
    } 
4

Problem polega na tym, że chcesz zainicjować boost :: thread ze wskaźnikiem do funkcji składowej.

Będziesz potrzebować:

Test() 
    :thread_(boost::bind(&Test::Process, this)); 
{ 

} 

Również ten question może być bardzo pomocne.