gpt4 book ai didi

delphi - 如何混合套接字,消息和事件

转载 作者:行者123 更新时间:2023-12-03 12:05:35 25 4
gpt4 key购买 nike

有一个线程使用ADO Connection对象,使用套接字进行操作,并使用WaitForSigleObject或WaitforMultipleObjects对外部事件使用react。该线程具有3个 Action 的endles循环:

While PeekMessage(MSG, 0, 0, PM_REMOVE) do ProcessMessages(MSG); //for processing messages of COM system

if Socket.CanRead then ... //CanRead is true when there is data in socket to read

if WaitForSingleObject(fHandle, 0) = WAIT_OBJECT_0 then ... //fHandle is handle of outer event

几乎所有时间线程都在浪费CPU询问所有三种类型的事件。有没有办法让线程进入休眠状态,直到发生三种类型的事件之一,例如WaitForMultiplyObjects或GetMessage?

最佳答案

尚不清楚您使用哪种套接字对网络进行操作。通常,有两种使用套接字的方法,阻塞套接字或非阻塞套接字。如果使用阻塞套接字(例如Indy),则最好使用单独的线程进行套接字操作。
如果使用非阻塞套接字(如ICS库),则可以对所有输入事件使用MsgWaitForMultipleObjectsEx函数与标志QS_ALLINPUT进行同步。您可以在此处找到有关此功能的更多信息:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684245%28v=vs.85%29.aspx
MsgWaitForMultipleObjectsEx与WaitforMultipleObjects的主要区别在于,第一个对象不仅可以在发出某些对象信号时唤醒,而且还可以在队列中张贴某些特定消息或任何消息时唤醒。看来这就是您的要求。

关于delphi - 如何混合套接字,消息和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com