2011-12-05 44 views
-2

我有以下情形,方法结束后执行线程吗?

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

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

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

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

+0

在离开函数之前创建线程? –

+0

那么,你想在短暂的延迟后启动另一个线程? – OSH

+0

为什么它不能正常工作? – TheJuice

回答

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); 
    } 
    

一件事的第一个方法,就是你要记得如果在函数结束之前有明确的return,则创建线程。或者使用goto转到线程创建,而不是return

0

定义静态函数的外部手柄或使静态为静态。函数中的线程句柄一旦离开函数就会被销毁,而t从堆栈中移出。如果您不需要对线程进行任何控制(或以干净的方式将其删除),请保持原样。

相关问题