870920 Menu

AsyncUpdater(异步更新)

AsyncUpdater(异步更新)是一个抽象基类,用于触发一个异步回调。本类可将多个触发信号集中到一起,在适当的时机进行统一回调。即:触发异步更新后,所回调的代码并不一定立即执行,而是由主线程根据实际情况在稍后的某个空闲时间里进行回调。使用本类可避免同步更新时有可能出现的消息阻塞等问题。

JUCE类库中的一大批重要的类均继承自AsyncUpdater,比如Desktop、ComboBox、MenubarModel、AudioProcessorGraph等等。


AsyncUpdater类的使用流程

派生子类,实现纯虚函数handleAsyncUpdate(),在此函数中调用需要回调的函数或代码(通常是可异步更新的具体功能)。需要执行异步回调时,调用triggerAsyncUpdate()函数触发更新,而不是直接调用具体的功能函数(功能函数由handleAsyncUpdate()所调用)。

触发更新之后,并不立即调用handleAsyncUpdate(),具体什么时候调用该函数,由消息线程来确定。也就是说,此时存在一个或多个“等待回调(挂起)”的更新。如要取消更新,可在此期间调用cancelPendingUpdate()函数。如要立即更新,则调用handleUpdateNowIfNeeded()。如果不确定当前是否有挂起的更新,可调用isUpdatePending()来判断。

AsyncUpdater类的成员函数
 triggerAsyncUpdate () 触发异步更新,即触发本类的handleAsyncUpdate()
 cancelPendingUpdate () 取消触发异步更新,调用上一个函数之后,可调用此函数取消之
 handleUpdateNowIfNeeded () 如果触发了一个更新并且正处于挂起状态,此函数将立即调用之
 isUpdatePending () 如果至少存在一个待回调的异步触发,则返回true
 handleAsyncUpdate () 纯虚函数,在此执行某个函数或某些操作的回调