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.

questionAnswers(1)

yourAnswerToTheQuestion