C++ 多线程日志打印优先级c++;

C++ 多线程日志打印优先级c++;,c++,C++,在多线程处理中,如何根据严重性为打印日志分配优先级?例如,如果我有一个打印日志的多线程程序,该程序将3个严重性打印到日志:调试、错误和致命。 如果致命错误与错误一起出现,致命错误应首先出现,错误应第二次出现。 如何实现上述目标?有一个线程来打印日志 使用将数据从其他线程(生成日志事件)馈送到日志线程。使用互斥锁保护优先级队列,以便一次只能有一个线程修改它 使用严重性级别作为主键,时间戳作为确定队列优先级的辅助键。请注意,默认情况下,优先级队列对键进行排序,因此最大的键排在第一位——如果fatal

在多线程处理中,如何根据严重性为打印日志分配优先级?例如,如果我有一个打印日志的多线程程序,该程序将3个严重性打印到日志:调试、错误和致命。 如果致命错误与错误一起出现,致命错误应首先出现,错误应第二次出现。
如何实现上述目标?

有一个线程来打印日志

使用将数据从其他线程(生成日志事件)馈送到日志线程。使用互斥锁保护优先级队列,以便一次只能有一个线程修改它

使用严重性级别作为主键,时间戳作为确定队列优先级的辅助键。请注意,默认情况下,优先级队列对键进行排序,因此最大的键排在第一位——如果
fatal
为0,
error
为1,
debug
为2,则可能必须指定
std::greater
进行降序排序,以获得正确的顺序(您肯定需要对时间戳进行降序比较)


这样,致命错误将直接移动到队列的前面,但如果(例如)有三个警告几乎同时出现,它们将按时间顺序排列。

假设您尽快记录事件,则不能。否则,您可以使用锁将稍后应该记录的内容存储在某个位置,然后按照您想要的优先级进行检查。您希望如何检测多个日志请求完全同时出现?您可以对每个严重性使用单独的队列。如果“致命”队列为空,则转到“错误”队列;如果为空,则转到“调试”队列;如果为空,则无需打印。