C++ select() 不等待超时时间

2024-01-03

我正在尝试使用 select 函数来接受输入,但如果用户没有输入任何内容,则每 2 秒执行一次其他操作。下面的代码在第一次到达 select() 时等待两秒,但是一旦打印出第一个“超时”消息,它就会快速继续打印“超时”而不等待 2 秒,基本上进入无限循环。有人知道问题是什么吗?谢谢你的帮助。

#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
using namespace std;

const int STDIN = 0;
int main(int argc, int *argv[])
{
struct timeval tv;
fd_set readfds, master;
tv.tv_sec = 2;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_ZERO(&master);
FD_SET(STDIN, &readfds);
FD_SET(STDIN, &master);
string buffer = "";
while(buffer != "quit"){
    readfds = master;
    if(select(STDIN+1, &readfds, NULL, NULL, &tv) == -1) perror("select");
    if (FD_ISSET(STDIN, &readfds)){
        getline(cin, buffer);
        cout << "You entered: " << buffer << endl;
    }else
        cout << "Timed out.\n" << endl;
}
return 0;
}

每个人: select() 可能会更新超时参数以指示还剩多少时间。 pselect() 不会更改此参数。

这意味着如果 2 秒后超时,它可能会将您的 tv_sec 设置为 0。

如果 timeval 的两个字段都为 0,则立即返回。

尝试在 while() 内的每个循环中设置超时,以确保它不会被覆盖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ select() 不等待超时时间 的相关文章

随机推荐

  • 使用实体框架代码优先的 EF6 存储函数,我可以返回自定义类型吗?

    我有一个实体类 public class SomeClass public int Id get set public int Value get set public string Name get set 使用实体框架代码优先的 EF6
  • Twython OAuth1 问题,使用示例代码的 401 错误

    我正在尝试使用最新版本的 Twython 和 Python 2 7 3 设置流 我正在尝试重现中的示例流媒体文档 https twython readthedocs org en latest usage streaming api htm
  • 使用 extrafont 将字体导入 R 时如何解决“无字体名称”问题?

    我的 Windows 桌面上有一个文件夹 C Users me Desktop Fonts 其中包含我想使用导入到 R 中的字体extrafont 当我尝试使用导入字体时 library extrafont font import path
  • 将模型公式传递给另一个函数时出现对象未找到错误

    我在 R 上遇到了一个奇怪的问题 我似乎无法解决 我尝试编写一个函数 对 R 中的逐步过程选择的模型执行 K 折交叉验证 我知道逐步过程的问题 纯粹是为了比较目的 现在的问题是 如果我定义函数参数 linmod k 方向 并运行函数的内容
  • iOS - 逐帧读取视频文件,进行图像处理,然后另存为新视频文件

    我尝试从 iPhone 相册中逐帧读取视频 图像处理后 我会将它们另存为新视频 我正在运行我的代码 没有任何错误 但相册中没有新视频 这是我的代码 Video writer init BOOL setupAssetWriterForURL
  • 为什么C#中的空结构会消耗内存

    我一直理解结构 值类型 包含结构字段中定义的字节数 但是 我做了一些测试 空结构似乎有一个例外 public class EmptyStructTest static void Main string args FindMemoryLoad
  • 用户向数据库PDO添加记录

    我希望让用户将记录添加到空数据库表中 事实上 我有一个数据库和一个空表 必须使用表单填写 第一个文件处理数据库连接 我使用PDO 返回一个空页面和一个名为 add 的链接 该链接转到表单
  • 数据类对象或数组

    我有一个 Kotlin 数据类 它的 arg 可以是对象或数组 有没有一种方法可以将字符串反序列化到此类中 并且不关心是否不是数组 而是以某种方式将其放入一个数组中 data class Game var name List
  • Cloud Functions Puppeteer 无法打开浏览器

    我在 GCF 中的设置 install npm install save puppeteer来自项目云 shell 像这样编辑 package json dependencies puppeteer 19 2 2 粘贴代码来自媒体网站 ht
  • Julia:为图书馆建立 OOP 模型的最佳方法是什么

    我正在尝试创建一个图书馆 假设我有一个模型 其中有一个输出 输入和描述函数的方程 输入为 x 1 2 3 4 5 6 y 5 2 4 8 9 2 我把它放入一个函数中 returns y values function fit x a b
  • flutter firebase 推送通知图标

    I made an app and I implemented push notifications and it works but I ve tried to change the default icon with a image p
  • 在 python 中使用 meshlab 函数

    我是 3D 新手 我有一个点云 我想使用 python 库形成一个网格 但我可以使用网格实验室函数 这些函数是 过滤器 gt 点集 gt 计算点集的法线 和 过滤器 gt 重新划分网格 简化和重建 gt 曲面重建 Poission 有没有什
  • 在 Azure VM 中使用 Booksleeve Redis 客户端时出现 Redis 连接错误

    我最近开始在新的 Azure VM 上托管我的一个业余项目 该应用程序使用 Redis 作为内存缓存 在我的本地环境中一切都工作正常 但现在我已将代码移至 Azure 我发现 Booksleeve 出现了一些奇怪的异常 当应用程序第一次启动
  • Powershell:引号解析不一致/奇怪的行为?

    全部 我正在尝试使用 PowerShell 编译程序 但该命令的解析方式很奇怪 此命令在 cmd exe 中正确执行 dmd od bin of bin convHull exe I src src concSort d src fileP
  • 如何左对齐 SWT ToolItem 中的文本?

    我正在升级 RCP 应用程序以使用 Eclipse 4 2 1 我遇到的问题之一是工具栏中文本的对齐方式发生了变化 我可以使用以下片段重现该问题 该片段改编自标准SWT 片段 http git eclipse org c platform
  • 如何在Python中重新分配列表中的项目?

    我想在 Python 中重新分配列表中的每个项目 In 20 l 1 2 3 4 5 In 21 for i in l i i 1 但名单根本没有改变 In 22 l Out 22 1 2 3 4 5 我想知道为什么会这样 任何人都可以详细
  • 网络浏览器是否需要在客户端计算机上安装 IE

    我只是想知道是否有任何版本的 I E 部署使用 webbrowser 控件的应用程序时必须安装在客户端计算机上 目标 net 2 平台 Thanks 当您使用 添加 删除 Windows 组件 小程序来 删除 Internet Explor
  • (VB6) 逐行读取文本文件查找特定单词

    下午好 StackOverflow 我刚刚在这里注册 我已经使用这个网站很多年了 它似乎总是提供答案的网站 所以我决定参与其中 废话不多说 这是我的问题 我正在为 LAN 各方编写一个 API 我和一个团队每月都会使用该 API 来帮助解决
  • 了解汇编级别 ++i 和 i++ 之间的区别

    我知道这个问题的变体已经在这里被问过多次 但我并不是在问两者之间有什么区别 只是想要一些帮助来理解这两种形式背后的组装 我认为我的问题与whys比到what的差异 我正在阅读Prata 的 C Primer Plus在处理增量运算符的部分
  • C++ select() 不等待超时时间

    我正在尝试使用 select 函数来接受输入 但如果用户没有输入任何内容 则每 2 秒执行一次其他操作 下面的代码在第一次到达 select 时等待两秒 但是一旦打印出第一个 超时 消息 它就会快速继续打印 超时 而不等待 2 秒 基本上进