2011-01-14 24 views
0

一個計時器線程如何創建一個定時器線程函數:timerThreadFunction(的pthread_t的thread_id),並檢查計時的結果在其他功能安全的方式:如何創建在C

// Begin of atomic part -- cause i'm in multithreaded environement 
    if (timerThreadFunction(thread_id) has not expired) { 
     // SOME WORK HERE 
    } 

    else { 

    // Timer expired 
    // some work here 

    } 

// End of atomic part 

感謝。

+2

因爲C沒有本地線程庫,所以你必須告訴我們你在什麼平臺上,所以我們可以建議。我也建議您重新提出您的問題以指出該平臺。免得你被平臺的答案轟炸,你不感興趣。 – jer 2011-01-14 21:20:07

+0

LINUX平臺:) – iPadDevloperJr 2011-01-14 21:22:00

+1

@jer:在問題中提到`pthread_t`似乎意味着Pthreads庫。 – caf 2011-01-15 06:25:17

回答

2

如果您詢問互斥部分,您可以使用互斥鎖來完成此操作。使用pthread_mutex_init to initialize a mutex and pthread_mutex_destroy進行清理。然後使用pthread_mutex_lock and pthread_mutex_unlock獲取並釋放互斥鎖。

編輯根據你在評論中提到的另一篇文章的簡短(非常簡短)的看看,我知道你正在尋找睡眠的替代方法()。一種可能性是使用select()。做這樣的事情:

struct timeval sleeptime; 
// initialize sleeptime with the desired length such as 
memset(&sleeptime, 0, sizeof(sleeptime)); 
sleeptime.tv_sec = 5; 

select(0, NULL, NULL, NULL, &sleeptime); 

這不會阻塞其他線程。但是,您應該注意,即使時間尚未結束,如果進程收到任何信號,select將返回(如果我沒有記錯的話)。

0

有選項

  1. 不要使用一個單獨的線程,只是輪詢一些內部定時器負荷。
  2. 讓您的計時器線程完成並將您的主線程連接到計時器線程。
  3. 使用信號量
  4. 使用互斥鎖保護標誌。

這應該足以讓你開始。