我有以下情况,
void* Refresh(void *)
{
usleep(10);
..
}
static void RefreshViews()
{ ...
pthread_t t;
pthread_create( &t, NULL, &Refresh, NULL);
...
}
我想在RefreshViews()函数的末尾运行一个线程。为了正常工作(临时解决方案),我在Refresh()函数执行开始时在另一个线程中添加了sleep。
如何更好地处理这种情况?
答案 0 :(得分:1)
您可以使用三种方法:
就像我在评论中说的那样,在离开函数之前启动线程。
static void RefreshViews()
{
/* The code... */
pthread_t t;
pthread_create( &t, NULL, &Refresh, NULL);
}
在调用RefreshViews
的函数中创建线程。
有一个额外的函数,它充当真实函数的代理,并创建线程:
static void RefreshViews()
{
RealRefreshViews();
pthread_t t;
pthread_create( &t, NULL, &Refresh, NULL);
}
关于第一种方法的一件事是,如果在函数结束之前有明确的return
,则必须记住创建线程。或者使用goto
转到线程创建而不是return
。
答案 1 :(得分:0)
定义静态函数的thraed handle outsite或者使t静态。离开函数后,函数中的线程句柄将被销毁,并且t从堆栈中移出。如果您不需要对线程进行任何控制(或以干净的方式将其移除),请将其保留原样。