我正在开发一个用于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;
第二行会恢复在第一行开始的同一个线程吗?
答案 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。