gpt4 book ai didi

c++ - 选择/轮询循环中的回调和延迟

转载 作者:行者123 更新时间:2023-11-28 08:31:13 25 4
gpt4 key购买 nike

编写可以在同一个线程中为多个客户端提供服务的服务器时,可以使用轮询/选择。选择和轮询,但是需要一个文件描述符才能工作。出于这个原因,我不确定如何执行简单的异步操作,比如实现一个简单的回调来中断长时间运行的操作或延迟回调而不退出选择/轮询循环。如何去做这件事?理想情况下,我想在不产生新线程的情况下执行此操作。

简而言之,我正在寻找一种可以执行所有异步操作的机制。 Windows WaitForMultipleObjects 或 Symbian TRequestStatus 似乎更适合通用的异步操作。

最佳答案

对于任意回调,维护一个 POSIX 管道(参见 pipe(2))。当你想做一个延迟调用时,写一个由函数指针和可选的上下文指针组成的结构到写端。读取端只是选择的另一个输入。如果它选择可读,则读取相同的结构,并以上下文作为参数调用该函数。

对于定时回调,按到期时间顺序维护一个列表。列表中的条目是例如的结构。 { 到期时间(自上次回调以来的间隔);函数指针;可选上下文指针}。如果此列表为空,则在 select() 中永远阻塞。否则,在第一个事件到期时超时。在每次调用 select 之前,重新计算第一个事件的截止时间。

在合理的界面背后隐藏细节。

关于c++ - 选择/轮询循环中的回调和延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963366/

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