はじめまして。imudakです。よろしくお願いします。

ずっと悩んでいることがあるのですが、
signal/slot通信で、同一シグナルの連続発行を止められないでしょうか。
想定ケースは、例えばボタン連打、周期取得処理などです。

(ボタン連打)
[UI]                [Model]
|                      |
|--requestInc--------->|
|                      |-- begin: incrementの処理開始
|                      |
|--requestInc(2回目)-->|
|                      | 
|                      |
|--requestInc(3回目)-->|
| ...                  |
|--requestInc(n回目)-->|
|                      |   (とても長い)  
|                      |-- end: increment の処理終了
|                      |

1. 二つのクラスで間でsignal/slot通信をします。
UI: signal void requestInc(); // increment要求
Model: slot void increment(); // increment実処理

2. incrementは処理にとても時間がかかります(例:1分)。

3. このため、UIとModelを別スレッドで実行します。
QueuedConnectionでsignal/slotは接続します。

4. Bの処理中もAのsignalは発行可能なので、ボタン連打などにより
  requestIncはバンバン送られます。

5. Modelが最初のincrementを処理したときには、signalが山のように
  積みあがっいます。n個あるとすると、処理するにはn*1分かかります。

  別口でUIにincrement結果を返すようななっているとすると、
  連打した結果がn分後になってようやくUIに反映されます。

(周期取得処理)
ボタン連打同様に、1秒ごとに値取得する周期処理などを実行すると
1分待たされる間に60個くらいsignalがたまってしまいます。

以下のように解決方法はいくつか思いつくのですが、どれもすっきりしないのです。

解1) UI側で対処: signal発行する前に止める
- Modelからslot処理終了を受けとるまで、
次の発行しない仕組みを独自に作るなど。

解2) Model側で対処: slot側で受信後、実処理するか判断。
- 前のsignalを実行し終わった時間から一定時間たつまで実処理しない、など。

解3) 同期にする
- Model処理している間UIが固まります(マルチスレッド化した意味なし)

「重複したsignalのqueueがあった場合、二つ目以降は圧縮する(無視する)」
というような設定がQtにあればと思ったのですが、見当たりませんでした。
よく悩みがちな問題な気がするので、自力で作り始めてよいものかどうか…

Qtの仕組みやその周辺でスマートに解決した例などあれば、ご教示いただければ幸いです。

以上よろしくお願いします。

-----