我正在开发一个用于iOS和Android开发的C++ API。 因此,我需要使用pthread。使用pthread在C++中运行后台进程
现在我有一个函数,它在队列序列化后将数据发送到服务器。
//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;
第二行是否会恢复第一行开始的同一个线程?
为什么你不能使用'std :: thread'?如果你有C++ 11,你可能要考虑'std :: packaged_task','std :: async'和'std :: future' /'std :: promise'。 – kfsone
我的同事告诉我,与其他人存在一些跨平台问题。所以,我正在购买他们的话。老实说,我也没有使用过其他人。 –
'std ::'选项是标准库函数,所以它们通常是...标准。你的同事可能只是不熟悉C++ 11。 – kfsone