首页 > 编程知识 正文

acpi sleep state,sem_wait返回值

时间:2023-05-05 20:36:46 阅读:63276 作者:516

以前,pthread_cond_timedwait ) )讨论过不能使用接口。 如果需要超时返回功能,就必须写计时器来实现。 但是这个操作太贵了。 实际上,您可以直接使用这个界面来实现等待超时的功能。 下面我来说明一下我对这个接口的了解和使用方法。 仅供参考。

1.POSIX提供了多种时钟类型,包括以下两种类型的:

clock _ real time:systemwiderealtimeclock .整个系统的实时时钟是可以通过命令等修改系统时间的软件时钟。

clock _ monotonic:representsmonotonictime.cannot beset .表示单调时间,是从系统启动时到现在的时间,不能设置或修改。

如果没有设置条件变量的属性,pthread_cond_timedwait ()默认使用CLOCK_REALTIME软件时间,因此在极端情况下,实际等待时间和设置的超时时间不同

本节介绍如何正确使用pthread_cond_timedwait ()接口

pthread_cond_timedwait (正确使用接口方法,将测量时间引用更改为CLOCK_MONOTONIC )。 这需要在初始化时设置条件变量的属性,然后设置超时时间。 示例为以下:

ret=pthread_condattr_init () pthread_info.condattr );

if(ret!=0}{

退出(1;

}

ret=pthread_condattr_setclock () pthread_info.condattr ),CLOCK_MONOTONIC );

ret=pthread_cond_init () pthread _ info.clean up _ queue _ wait ),) pthread_info.condattr );

.

结构时间片段电视;

时钟_ gettime (clock _ monotonic,tv );

pthread_task_DBG(logs_debug,' nowtime:%dn ',tv.tv_sec );

电视.电视_ sec=30; -此处设置为30秒后返回而不接收事件超时

ret=pthread_cond_timedwait () pthread _ info.clean up _ queue _ wait ),) pthread _ info.clean up _ qu queue _ t

.

执行以下:

从以上可见,在这种方式中,无论系统时间设置了什么值,系统执行时间都不会改变,并且线程保持原始30秒的超时。

3 .实际上,也可以使用CLOCK_REALTIME作为测量时间的参考。 但是,在极端情况下,例如,如果在获取当前系统时间后立即修订了系统时间,则此超时时间不准确,但这是一个低概率事件。

作为例子,以下:

结构时间片段电视;

电视. TV _ sec=time (null; -极端情况下,系统时间将在获取当前系统时间后立即修订

pthread_task_DBG(logs_debug,' nowtime:%dn ',tv.tv_sec );

电视.电视_ sec=30; -此处设置为30秒后返回而不接收事件超时

ret=pthread_cond_timedwait () pthread _ info.clean up _ queue _ wait ),) pthread _ info.clean up _ qu queue _ t

执行以下:

综上所述,在此方法中,线程等待超时后,如果将系统时间更改为前后时间,time(null )将返回当前设置后的时间,但线程不会被触发而返回。

4 .参考资料:

3358 man.chinaunix.net/UNIX/sus v3/functions/pthread _ condattr _ set clock.html

3358 man.chinaunix.net/UNIX/sus v3/functions/pthread _ cond _ timedwait.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。