亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2163 | 回復: 0
打印 上一主題 下一主題

如何使用條件變量讓線程睡眠 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-12-12 17:03 |只看該作者 |倒序瀏覽
在網(wǎng)上(http://www.itwenku.com/linux/3/11923.htm)看到一個帖子,說是使用pthread_cond_timedwait使線程睡眠,不能精確到微秒級別,只能精確到秒。
引用原帖中內容:
“我設置了下面的值:
ts.tv_sec = time(NULL);
ts.tv_nsec=1000;
然后把子線程中的usleep都去掉,可超時就是不起作用?就是把ts.tv_nsec的值設成1000000也一樣沒用,郁悶”。


給個參考代碼(msec是毫秒,如果要做成微秒級別,修改一下就行了),以防還有兄弟犯類似錯誤,呵呵:
void sleep_thread(int msec)
{
        struct  timespec        wake;
        struct  timeval         now;
        int     nsec;
        pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
        pthread_cond_t  cond = PTHREAD_COND_INITIALIZER;

        gettimeofday(&now, NULL);
        nsec = now.tv_usec * 1000 + (msec % 1000) * 1000000;
        wake.tv_sec = now.tv_sec + msec / 1000 + nsec / 1000000000;
      
       //如果把上面的兩句替換成下面的兩句,就是實現(xiàn)微秒級別睡眠
       //nsec = now.tv_usec * 1000 + (msec % 1000000) * 1000;
       //wake.tv_sec = now.tv_sec + msec / 1000000 + nsec / 1000000000;
        wake.tv_nsec = nsec % 1000000000;

        pthread_mutex_lock(&mutex);
        pthread_cond_timedwait(&cond, &mutex, &wake);
        pthread_mutex_unlock(&mutex);

        pthread_mutex_destroy(&mutex);
        pthread_cond_destroy(&cond);
}

順便說一下,其實使線程睡眠沒必要那么復雜,用sleep, usleep就行(在Linux上,它們是使線程睡眠,Unix上怎樣實現(xiàn)的,我沒驗證過)。要跨平臺,用一些跨平臺類庫如APR的apr_sleep就搞定了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP