Passando um objeto de função C ++ para a função pthread_create como a rotina do thread
Eu sei que a rotina de encadeamento passada para a API pthread_create tem o protótipo de
void *threadproc(void *).
Eu queria saber se é possível usar um objeto de função C ++ como uma rotina de thread.
Aqui está o meu código:
Execução :: run método leva umtime_t variável e umfunctor como parâmetros. Ele gera um encadeamento POSIX no qual gira até que o tempo de execução agendado seja atual e execute algum trabalho.
#include <pthread.h>
#include <ctime>
#include <unistd.h>
#include <iostream>
using namespace std;
class ThreadFunctor
{
public:
void *operator()(time_t runTime)
{
time_t curTime;
double timeDiff;
time(&curTime);
timeDiff = difftime(runTime, curTime);
if (timeDiff > 0)
{
sleep(timeDiff);
}
//
// doSomething();
//
return NULL;
}
};
class Execution
{
public:
Execution() {}
int run(time_t scheduledTime, ThreadFunctor &threadProc)
{
int rc = pthread_create(&mThread, NULL, threadProc, &scheduledTime);
if (rc != 0)
{
cerr << "Thread creation failed\n";
return -1;
}
return 0;
}
private:
pthread_t mThread;
};
Questões:
Posso usar um objeto de função como função de thread? Quão?
Como passo parâmetros para o método operator () do objeto de função?
Nesse código, o processo pai termina enquanto o thread filho ainda está em execução. Porque não queremos bloquear o chamador do método run (). Esta é uma boa prática? O segmento órfão causará problemas aqui?
Obrigado.