读书人

关于等待毫秒的有关问题

发布时间: 2012-05-29 12:16:00 作者: rapoo

关于等待毫秒的问题
我就需要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;//得到的是剩下的纳秒数 

读书人网 >UNIXLINUX

热点推荐