I have the following class:
class A
{
private:
int starter()
{
//TO_DO: pthread_create()
}
void* threadStar
Do you have a reason for using pthreads? c++11 is here, why not just use that:
#include <iostream>
#include <thread>
void doWork()
{
while(true)
{
// Do some work;
sleep(1); // Rest
std::cout << "hi from worker." << std::endl;
}
}
int main(int, char**)
{
std::thread worker(&doWork);
std::cout << "hello from main thread, the worker thread is busy." << std::endl;
worker.join();
return 0;
}
Declare the threadStartRountine()
as static
:
static void* threadStartRoutine( void *pThis );
Otherwise, the type of threadStartRoutine()
is:
void* (A::*)(void*)
which is not the type of function pointer that pthread_create()
requires.
Just use a normal function as a wrapper. As hjmd says, a static function is probably the nicest kind of normal function.
If you insist on using the native pthreads interface, then you must provide an ordinary function as the entry point. A typical example:
class A
{
private:
int starter()
{
pthread_t thr;
int res = pthread_create(&thr, NULL, a_starter, this);
// ...
}
public:
void run();
};
extern "C" void * a_starter(void * p)
{
A * a = reinterpret_cast<A*>(p);
a->run();
return NULL;
}