Windows API控制台锁 我试图在C++中为Windows创建一个简单的线程安全的控制台包装器。但是看看API,我没有看到任何用于锁定/解锁对控制台的访问的函数。对于记忆,有和

Windows API控制台锁 我试图在C++中为Windows创建一个简单的线程安全的控制台包装器。但是看看API,我没有看到任何用于锁定/解锁对控制台的访问的函数。对于记忆,有和,c++,winapi,C++,Winapi,控制台是否存在这样的函数,或者我必须创建自己的互斥锁 编辑: 如下面的注释所示,控制台包装器用于控制对控制台的访问。需要锁定,以便当线程在控制台上执行复合操作(例如,更改控制台颜色、写入多条消息,然后恢复颜色)时,其他线程无法修改控制台或对其进行写入。您应该锁定对负责日志记录的函数的访问权限。类似以下代码: std::mutex mforlog; void Log(std::string s) { std::unique_lock<mutex> lock{mforlog};

控制台是否存在这样的函数,或者我必须创建自己的互斥锁

编辑:


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

您应该锁定对负责日志记录的函数的访问权限。类似以下代码:

std::mutex mforlog;
void Log(std::string s) {
     std::unique_lock<mutex> lock{mforlog};
     std::cout << s << std::endl;
}
std::mutex mforlog;
无效日志(标准::字符串s){
std::unique_lock lock{mforlog};

std::您能解释一下锁定对控制台的访问是什么意思吗?您能澄清一下控制台包装器是什么意思吗?@Sean As在锁定访问并执行多个控制台操作以确保它们之间没有其他线程修改/写入控制台时。@AlexK。一个控制对标准输出的访问以进行日志记录的类。T这里没有一个控制台API函数可以锁定控制台,使其只能由单个线程使用。如果你想做这种事情,你必须用你自己的互斥体或类似的东西来实现它,即使这样也不会真正“锁定”控制台。它与任何其他互斥体一样:线程同意遵守的约定。