Windows API控制台锁

时间:2013-08-09 14:28:02

标签: c++ winapi

我正在尝试在C ++中为Windows创建一个简单的,线程安全的控制台包装器。但是看看API,我没有看到任何锁定/解锁访问控制台的功能。对于内存,有HeapLockHeapUnlock

控制台是否存在此类功能,还是我必须创建自己的互斥锁?

编辑:

如下面的评论所示,控制台包装器用于控制对控制台的访问。需要锁定,以便当线程在控制台上执行复合操作时(例如,更改控制台颜色,编写多个消息,然后恢复颜色),没有其他线程可以修改控制台或写入控制台

1 个答案:

答案 0 :(得分:2)

您应该锁定对负责记录的函数的访问。如下面的代码:

std::mutex mforlog;
void Log(std::string s) {
     std::unique_lock<mutex> lock{mforlog};
     std::cout << s << std::endl;
}

如果您的日志记录是从不同的进程完成的,那么请使用命名的互斥锁(winapi函数:CreateMutex)。

您还应该知道,锁定日志记录可能会导致其他问题,例如某些线程将运行得更慢(等待互斥锁),这可能导致很难发现错误。