Closed cyanray closed 3 years ago
关键在于mirai_bot.cpp的第950行
cv.wait(lock); // 在这之前,应该检查 event_queue 是否为空
因为在处理事件时,event_queue 可能会被其他线程修改,此时 event_queue 不为空,应该继续往下走,而不是 wait 新的事件。如果直接 cv.wait,就只能等下一次 event_queue 被修改时,才会从 cv.wait 中返回。
修改后的代码:
...... unique_lock<mutex> lock(mutex_event_queue); +if (event_queue.empty()) +{ cv.wait(lock); +} if (event_queue.empty()) continue; ......
😫
关键在于mirai_bot.cpp的第950行
因为在处理事件时,event_queue 可能会被其他线程修改,此时 event_queue 不为空,应该继续往下走,而不是 wait 新的事件。如果直接 cv.wait,就只能等下一次 event_queue 被修改时,才会从 cv.wait 中返回。
修改后的代码:
😫