|
|
1
2
这看起来像一个简单的包装
你应该继续读下去
|
|
|
2
2
可读事件意味着可以在不阻塞的情况下读取特定文件描述符上的数据,而可写事件意味着您可以在不阻塞的情况下写入特定文件描述符。这些通常用于插座和管道。查看
计时器事件表示先前创建的计时器已过期。如果库正在使用
|
|
|
3
1
猜测一下,create()调用将函数指针存储在某个地方。然后,当计时器关闭时,它调用通过该指针指定的函数。但是,由于这不是一个标准的C++函数,所以您应该真正阅读文档或查看源代码来确定。 关于您的其他问题,我没有看到提到优先级列表,select()是一种通用事件多路复用器。 |
|
4
1
很可能有一个框架与典型的主循环一起工作,主循环的驱动力是select调用。 选择允许您等待一个文件描述符变为可读或可写(或文件编辑器上的“异常”)或发生超时。我猜这个库还允许您注册用于异步IO的回调,如果它是一个GUI库,它将通过unix上的文件描述符获得低基元的GUI事件。 要在这样的循环中实现计时器回调,只需保留计时器的优先级队列,并在选择超时或文件描述符事件时处理它们。 优先级意味着它在计时器之前处理文件I/O,这本身需要时间,可能导致GUI更新,最终导致运行GUI事件处理程序,或其他花费时间维护I/O的任务。 图书馆或多或少在做
|
|
|
5
0
由于计时器回调中的线程ID与创建者线程相同,我认为它是通过某种方式使用信号实现的。 当一个信号被发送到一个线程时,该线程的状态被保存,并调用信号处理程序,然后调用事件回调。 因此,在创建者线程中调用该处理程序,该线程被中断,直到信号处理程序返回。 可能另一个线程使用select()等待所有计时器,如果计时器过期,它会向创建过期计时器的线程发送一个信号。 |
|
|
AryA Derakhshan · 在指定的时间重复循环 4 年前 |
|
|
user8105388 · If语句不与计时器一起工作 8 年前 |
|
|
Don · 无限循环崩溃,但不在更新函数中 8 年前 |
|
|
user9769106 · 绘制形状C的路径# 8 年前 |
|
|
SPlatten · MSVC 2008更好的时机? 8 年前 |