方法结束后执行一个线程?

时间:2011-12-05 11:01:27

标签: c multithreading pthreads posix sleep

我有以下情况,

void* Refresh(void *)
{
 usleep(10);
 ..
}

static void RefreshViews()
{    ...
     pthread_t t;
     pthread_create( &t, NULL, &Refresh, NULL);
     ...
}

我想在RefreshViews()函数的末尾运行一个线程。为了正常工作(临时解决方案),我在Refresh()函数执行开始时在另一个线程中添加了sleep。

如何更好地处理这种情况?

2 个答案:

答案 0 :(得分:1)

您可以使用三种方法:

  1. 就像我在评论中说的那样,在离开函数之前启动线程。

    static void RefreshViews()
    {
        /* The code... */
    
        pthread_t t;
        pthread_create( &t, NULL, &Refresh, NULL);
    }
    
  2. 在调用RefreshViews的函数中创建线程。

  3. 有一个额外的函数,它充当真实函数的代理,并创建线程:

    static void RefreshViews()
    {
        RealRefreshViews();
        pthread_t t;
        pthread_create( &t, NULL, &Refresh, NULL);
    }
    
  4. 关于第一种方法的一件事是,如果在函数结束之前有明确的return,则必须记住创建线程。或者使用goto转到线程创建而不是return

答案 1 :(得分:0)

定义静态函数的thraed handle outsite或者使t静态。离开函数后,函数中的线程句柄将被销毁,并且t从堆栈中移出。如果您不需要对线程进行任何控制(或以干净的方式将其移除),请将其保留原样。