Я реализую механизм отслеживания окна A, следующего за положением окна B. Окно B отправляет события своей позиции, а окно B реагирует на эти события, вызывая setWindowProperties
:
void setWindowProperties(bool topMost, bool visible,
CGWindowID parentWindow, CGWindowID aboveWindow,
NSRect windowFrame, NSRect viewFrame, bool isAbove)
{
dispatch_async(dispatch_get_main_queue(), ^{
setWindowPropertiesImpl(topMost, visible, parentWindow, aboveWindow, windowFrame, viewFrame, isAbove);
});
}
Но из-за слишком большого количества событий, отправляемых окном B, я получаю эффект «отслеживания змеи». Я хочу преодолеть это, реагируя только на последнее событие position, то есть отменяя все предыдущие вызовы:
dispatch_async(dispatch_get_main_queue(), ^{
setWindowPropertiesImpl(topMost, visible, parentWindow, aboveWindow, windowFrame, viewFrame, isAbove);
});
И в результате оставить в очереди только последнее позиционное событие — единственное, что имеет значение.
Мой вопрос: есть ли способ отменить все предыдущие вызовы dispatch_async
?