代码如下,该程序中以标注输入(STDIN)作为文件描述符,然后调用select函数,一共调用了三次,按说应该执行三次,比如说我每次都不输入,那么执行顺序应该是:等待2秒->输出time out->等待2秒->输出time out1->等待2秒->输出time out2。但实际执行时是这样的:等待2秒->输出time out->输出time out1->输出time out2。这是为什么呢?另外如果我在等待期间按一个按键,执行结果也是第一次执行,第2、3次不

展开全部
收起
4回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 徐老师

    17人对此回答表示赞同

    N次吧
    展开
    17
    0回复
    发布于 5年前

    评论(0)

    收起评论

  • 难以启齿

    13人对此回答表示赞同

    Linux下调用select之后,tv 参数可能被重置!如果下一次还想等待相同时间,应该重新设置tv!
    展开
    13
    0回复
    发布于 5年前

    评论(0)

    收起评论

  • Aiden

    8人对此回答表示赞同

    没听说过在线程中(pthread)不能select或者有特殊用法的说法,提供更详细一点的信息吧……
    展开
    8
    0回复
    发布于 5年前

    评论(0)

    收起评论

  • Natalie

    1人对此回答表示赞同

    原因很简单。

    因为,你按下一个键之后,缓冲区里面有数据了,也就是说,stdin已经发生了一个事件,就是有数据来了。
    你一直没有对缓冲区做任何操作,因此stdin一直保持着有数据的状态。

    如果你在个select返回之后,用fflush清空缓冲区,或者,把缓冲区数据用scanf,getchar等输入函数给拿出来,数据取完了,stdin缓冲区就没东西了,再select,状态就是等待事件发生状态了。

    为了保险,你每次重新把tv给赋值一
    展开
    1
    0回复
    发布于 5年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部