如何在C ++中实现事件触发的回调

时间:2015-11-12 03:36:14

标签: c++ multithreading events callback locking

假设在系统中,用户将向系统注册回调函数,并且在触发事件时将调用回调函数,但如果事件已被触发,则用户将同步调用回调函数。

例如,用户i在时间Ti注册cb i, 并且该事件在时间Te被触发。假设T1 < T2&lt; T3&lt; ......&lt; Tm&lt; Te&lt; Tm + 1&lt; ......&lt; TN。在时间Te,cb1,cb2,...,cbm将被调用。 cbm + 1,...,cbn将被同步调用。

因此,我们需要实施两个API:void register_cb(cb)void trigger_event()

以下是Python实现。

is_triggered = 0
mutex = 1
def register_cb(cb):
    q=deque([])
    wait(mutex)
    if is_triggered == 0:
        q.append(cb)
        signal(mutex)
    else:
        signal(mutex)
        cb()

def trigger_event():
    is_triggered = 1
    wait(mutex)
    signal(mutex)
    while q:
        q.popleft()
        cb()

我们如何使用相同的多线程处理将代码转换为C ++?

0 个答案:

没有答案