关于等待毫秒的有关问题
关于等待毫秒的问题我就需要pthread_cond_timedwait函数等待500毫秒,看了写网上代码似乎都没说明白,特地上
关于等待毫秒的问题
我就需要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++ codem_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;//得到的是剩下的纳秒数