gpt4 book ai didi

c - 如何使用输入功能的时间延迟?

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:37 24 4
gpt4 key购买 nike

delay(msec)sleep(sec) 等函数将程序延迟指定的时间,但仅在控制传递给它之后。例如,在 delay() 之前使用 printf() 函数,首先执行 printf(),然后执行 delay()。但是,如果我们使用 scanf()getchar() 和其他输入处理函数,控制不会传递给 delay() 直到我输入。对吧?

有没有办法执行scanf()指定的时间,然后在没有输入的情况下在时间完成后退出?是否有任何功能可以在指定的时间段内执行 scanf() 或任何其他输入功能?

最佳答案

您是正确的,因为您的程序只有一个线程,所以在 scanf( ) 已经结束。

我想你要做的是读取一个字符串,等待一个时间限制。解决方案是构建要单独扫描的字符串(同时检查时间限制是否已过期),然后将字符串传递给 sscanf()(注意额外的 s) 供以后处理。

第一部分是困难的部分。执行此操作的最简单方法可能是在 STDIN(即输入流)上使用循环和 select(),并设置一个小超时。每当一个字符到达时,将其添加到字符串中。您将需要手动处理(例如)删除。使用 gettimeofday 读取时间,如果此时间与开始时间之间的差异超过给定的超时时间,则在超时的基础上退出。

另一种方法是使用带有 SIGALRM 的警报处理程序。您可能(或可能不会)发现这会令人满意地终止 fgets()。您将需要一个没有SA_RESTARTsigaction。有顺风,那应该行得通。我说“顺风”是因为那里似乎有错误的 c 库版本,当收到 EINTR 时无条件重试。参见示例:http://alumnus.caltech.edu/~dank/sigtest.c

当然这里可能有图书馆可以帮助你。 readline 没有内置超时。 editline 可能。

关于c - 如何使用输入功能的时间延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com