如何在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_; }; 你需要在每次通话时都这样做.它可能会有点乏味,但即使在客户端代码中可能没有明确支持的情况下,它也会提供一个透明的解决方案来提供超时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |