2011-12-05 89 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從堆棧中移出。如果您不需要對線程進行任何控制(或以乾淨的方式將其刪除),請保持原樣。

相關問題