微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我希望我的程序在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_;
};

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐