使用pthread在c ++中运行后台进程

时间:2015-06-17 05:52:46

标签: c++ multithreading pthreads background-process

我正在开发一个用于iOS和Android开发的c ++ API。 因此,我需要使用pthread。

现在我有一个函数,它在序列化队列后将数据发送到服务器。

//include headers here
 void sendToServer(queue q) {
  /*
  send the whole queue to server after serialization
  pop the queue
  */
}

调用
// headers
void log (data)
{
  while(1)
  {/*
  add data to queue q
  */
  if(num_nodes>=threshold || duration > interval)
  sendToServer(q);
  //apply thread wait condition 
  }
}

如果我想为后台运行的日志创建一个单独的线程,我可以用get_instance方法实现一个单例类,该方法用日志启动一个线程

class C
{
  private:

    C();
    /*disallow copy constructor and assignment operator*/
    static C* singleton_inst;
    pthread_t t;
    void sendToServer(queue q);

  public:

    void* log(void*);
    static C* get_instance()
    {
      if(singleton_inst==NULL)
      {
        pthread_create(t, NULL, log, NULL);
        singleton_inst= new C();
      }
      return singleton_inst;
    }
}

所以,下次我的测试功能,当我这样做时:

C::get_instance(); //C::get_instance->signal_thread_to_resume;

第二行会恢复在第一行开始的同一个线程吗?

1 个答案:

答案 0 :(得分:1)

如果你真的必须使用pthread我认为这会有效,但它没有经过测试:

#include <iostream>
#include <pthread.h>
using namespace std;

//include headers here
/*the called function must be void* (void*)  */ 
/* so you have to cast queue*/
 void* sendToServer(void* q) {
  /*
  send the whole queue to server after serialization
  pop the queue
  */
}

pthread_t thread1;

// headers
void log (char* data)
{

  // create the thread
  int th1 = pthread_create( &thread1, NULL, sendToServer, (void*) data);
}

int main() {
  log((char*)"test");
  /* Wait till threads are complete before main continues. Unless we  */
  /* wait we run the risk of executing an exit which will terminate   */
  /* the process and all threads before the threads have completed.   */
  pthread_join( thread1, NULL);
  return 0;
}

别忘了与pthread图书馆联系。没有它,它将无法工作 但是尝试使用std :: thread。