加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C中读取最大X秒?

发布时间:2020-12-16 07:04:06 所属栏目:百科 来源:网络整理
导读:我希望我的程序在FIFO中等待读取内容,但如果读取(我使用std :: fstream)持续时间超过5秒,我希望它退出. 是否可以或者我必须绝对使用警报? 谢谢. 解决方法 我不相信有一种干净的方法可以实现这个只有便携式C的解决方案.您最好的选择是在 Windows上使用轮询或
我希望我的程序在FIFO中等待读取内容,但如果读取(我使用std :: fstream)持续时间超过5秒,我希望它退出.

是否可以或者我必须绝对使用警报?

谢谢.

解决方法

我不相信有一种干净的方法可以实现这个只有便携式C的解决方案.您最好的选择是在 Windows上使用轮询或选择基于* nix的系统和WaitForSingleObject或WaitForMultipleObjects.

您可以通过创建代理streambuffer类来透明地执行此操作,该类将调用转发到实际的streambuffer对象.这将允许您在进行实际读取之前调用相应的等待函数.它可能看起来像这样……

class MyStreamBuffer : public std::basic_streambuf<char>
{
public:
    MyStreamBuffer(std::fstream& streamBuffer,int timeoutValue)
        : timeoutValue_(timeoutvalue),streamBuffer_(streamBuffer)
    {
    }

protected:
    virtual std::streamsize xsgetn( char_type* s,std::streamsize count )
    {
        if(!wait(timeoutValue_))
        {
            return 0;
        }

        return streamBuffer_.xsgetn(s,count);
     }

private:
     bool wait() const
     {
         // Not entirely complete but you get the idea
         return (WAIT_OBJECT_0 == WaitForSingleObject(...));
     }

    const int       timeoutValue_;
    std::fstream&   streamBuffer_;
};

你需要在每次通话时都这样做.它可能会有点乏味,但即使在客户端代码中可能没有明确支持的情况下,它也会提供一个透明的解决方案来提供超时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读