日期:2014-05-16  浏览次数:20699 次

关于等待毫秒的问题
我就需要pthread_cond_timedwait函数等待500毫秒,看了写网上代码似乎都没说明白,特地上来问下,下面是网上代码

C/C++ code
        struct timeval now;
            gettimeofday(&now, NULL);
            m_tWaitTime.tv_sec = now.tv_sec ;
            m_tWaitTime.tv_nsec =  now.tv_usec * 1000;//网上这么写
            
            int ret = 0;
            ret = pthread_cond_timedwait(&m_tCond, &m_mutex, &m_tWaitTime);




m_tWaitTime.tv_sec = now.tv_sec ;//这句没问题
m_tWaitTime.tv_nsec = now.tv_usec * 1000;//网上这么写 似乎不对吧
首先 now.tv_usec是代表什么意思(当然不是说就代表微秒就完了,是代表从开机启动的微秒么???,还是该秒后的n多微秒)



------解决方案--------------------
now.tv_usec 单位是毫秒,m_tWaitTime.tv_nsec 单位是纳秒, 乘1000进单位。。。。。。。。。
------解决方案--------------------
不能这么写,pthread_cond_timedwait(&m_tCond, &m_mutex, &m_tWaitTime);
后面的waittime表示到这个时间点如果条件还不满足就超时,比如m_tWaitTime.tv_sec = now.tv_sec + 1;
表示经过1秒超时
------解决方案--------------------
struct timeval now;
 gettimeofday(&now, NULL);
now存的时间(now.tv_sec+now.tv_usec)是从1970年1月1日0时0分0秒到gettimeofday那一刻的时间总数

now.tv_usec代表的微秒
等待500毫秒可以如下
C/C++ code

m_tWaitTime.tv_sec=(now.tv_sec*1000000+now.tv_use+500*1000)/1000000;//得到的是秒数
m_tWaitTime.tv_nsec=(now.tv_sec*1000000+now.tv_use+500*1000)%1000;//得到的是剩下的纳秒数