- 1
- 0
- 约8.24千字
- 约 8页
- 2016-07-20 发布于河南
- 举报
配置CSocket 操作的超时时间
HYPERLINK /weidagang2046/articles/79285.html 配置Csocket 操作的超时时间
最后修改 : 2005年8月24日?
本文的发布号曾为 CHS138692转载自/weidagang2046/articles/79285.html
BOOL SetTimeOut(UINT uTimeOut)
BOOL KillTimeOut()
BOOL OnMessagePending()
示例代码
参考概要CSocket 操作,如“接收”(Receive)、“发送”(Send) 和“连接”(Connect) 均是阻塞操作,即要等到操作成功执行完毕或套接字上出现错误后,对这些函数的调用才有返回结果。
在某些情况下,操作可能永远不能成功完成,这将导致程序无限循环等待操作完成。一种解决方法是通过编程限制完成操作使用的时间。本文将讨论这种方法。??
这种方法是设置定时,让它在操作时间过长时启动。此方法的关键在于处理定时器的方式。虽然操作是“阻塞的”,但仍然可以处理到达的消息。如果通过使用 SetTimer 设置定时器,那??可以查找 WM_TIMER 消息,并在收到该消息时终止操作。该过程中涉及的主要函数有:?Windows API 调用函数:?::SetTimer?MFC 函数:?CSocket::OnMessagePending?CSocket::CancelBlockingCall?为简单起见,可以在 Csocket 衍生类中封装该功能。
警告:在进一步阅读本文之前,请注意在某些 MFC 版本中存在错误,会在试图使用定时器并重叠 OnMessagePending 时引起问题。这一问题将在下面的 Microsoft Knowledge Base 文章中进行讨论:?137632 ( HYPERLINK /kb/137632/EN-US/ /kb/137632/EN-US/) 错误:定时器激活时未调用 OnMessagePending?本文仅适用于 Visual C++ 的 1.52、1.52b、2.1 和 2.2 版本。如果使用的是这些 Visual C++ 版本之一,则还需要实施所提供的变通解决方法。
本文最后部分显示提供这种超时功能的类的示例代码。以下内容讲述由该类实现的函数。?
BOOL SetTimeOut(UINT uTimeOut)
调用此函数之后紧接着调用 CSocket 函数(如 Receive、Send 和 Accept)。uTimeOut 参数是以毫秒为单位指定的。之后,进行定时器的设置。如果设置定时器失败,那么函数返回 FALSE。有关详细情况,请参阅 SetTimer 函数的 Windows API 文档。??BOOL KillTimeOut()
在完成阻塞操作后,必须调用此函数。此函数删除用 SetTimeOut 设置的定时器。如果调用 KillTimer 失败,则返回 FALSE。有关详细情况,请参阅 KillTimer 函数的 Windows API 文档。?
BOOL OnMessagePending()
这是一个虚拟回调函数,在等待操作完成时由 CSocket 类进行调用。此函数给您提供处理传入消息的机会。此实施过程检查用 SetTimeOut 调用函数设置的定时器的 WM_TIMER 消息。如果收到消息,则调用 CancelBlockingCall 函数。有关 OnMessagePending 和 CancelBlockingCall 函数详细的信息,请参阅 MFC 文档。请注意:调用 CancelBlockingCall 函数 将导致操作失败,而且 GetLastError 函数返回 WSAEINTR(表示操作中断)。
下面是使用该类的一个例子:??? ...?? CTimeOutSocket sockServer;?? CAcceptedSocket sockAccept;
?? sockServer.Create(777);?? sockServer.Listen();
?? // Note the following sequence:?? //? SetTimeOut?? //???? //? KillTimeOut
?? if(!sockServer.SetTimeOut(10000))?? {???? ASSERT(FALSE);???? // Error Handling...for some reason, we could not setup???? // the timer.?? }
?? if(!sockServer.Accept(sockAccept))?? {?
您可能关注的文档
- 自题联.doc
- 艺术地坪装饰地面的好帮手.doc
- 节电论文.doc
- 节约集约用地范文.doc
- 良言集锦.doc
- 节能又环保的塑料回收机可再生出3D打印材料.doc
- 苏教版语文第九册单元复习和习题精选.doc
- 英语国培考核方案.doc
- 茂林瓦斯整治措施(不印).doc
- 茄子黄萎病.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 产后骨盆修复全流程指导手册.docx VIP
- HG∕T 2568-2021 工业偏硅酸钠.pdf
- 2025年鄂尔多斯市特岗教师招聘考试真题汇编附答案解析.docx VIP
- 24小时客服电话:010-82311666免费咨询热线:4.doc VIP
- 2020ACLS学员课课前测试中文版试题+答案.pdf VIP
- 髌骨脱位康复护理新进展.pptx VIP
- 急救医学-第四章心悸.ppt VIP
- 高中数学必修第四册第十一章综合测试01含答案解析.pdf VIP
- 2022年高考物理核心高频考点专题22 圆周运动的轻绳、轻杆模型(解析版).pdf VIP
- 马工程-中国古代文学史(第二版)上册第三编魏晋文学全套PPT课件50109.pptx
原创力文档

文档评论(0)