C++ Win32窗口类注册是线程安全的吗?

C++ Win32窗口类注册是线程安全的吗?,c++,class,winapi,thread-safety,mutex,C++,Class,Winapi,Thread Safety,Mutex,我目前正在努力用Win32 API创建线程安全窗口。我以前的所有应用程序都在静态上下文中使用单个HWND。现在我想让多个窗口包装在一个自定义窗口类中。在构造函数中,检查窗口计数器。如果为0,则应调用一次静态方法register\u window\u class,该方法将WNDCLASSEX结构注册为静态HINSTANCE static void register_window_class(); 同样的原则也适用于窗口类的窗口创建、销毁和注销 现在我不确定这些调用是否是线程安全的。我应该这样做吗

我目前正在努力用Win32 API创建线程安全窗口。我以前的所有应用程序都在静态上下文中使用单个HWND。现在我想让多个窗口包装在一个自定义窗口类中。在构造函数中,检查窗口计数器。如果为0,则应调用一次静态方法
register\u window\u class
,该方法将WNDCLASSEX结构注册为静态HINSTANCE

static void register_window_class();
同样的原则也适用于窗口类的窗口创建、销毁和注销

现在我不确定这些调用是否是线程安全的。我应该这样做吗

Window::Window()
{
  if(_WindowCounter == 0)
  {
    register_window_class();
  }
}
还是这个

std::mutex _Mutex;   // one mutex per window object    

Window::Window()
{
  _Mutex.lock();

  if(_WindowCounter == 0)
  {
    register_window_class();
  }

  _Mutex.unlock();
}

还是我完全错了?

Windows API中的窗口注册是否线程安全无关紧要,因为您计划只调用一次。您需要关心您的代码,您试图确保它实际上只被调用一次。
\u WindowCounter
在何处以及如何更新?“每个窗口对象一个互斥锁”对维护多个对象共享的计数器毫无帮助。“线程安全的窗口创建”-窗口创建是线程安全的。它还可以跨多个线程扩展UI。尽管如此,如果您必须询问,最好不要考虑创建多线程UI。@IgorTandetnik:实际上,它是否是线程安全的,这很重要,因为OP允许从任何线程进行此调用,尽管它可以防止调用重叠以在另一个线程中注册相同的窗口类名,没有人试图阻止在另一个线程中同时注册不同的窗口类(可能在库函数中)。由于让应用程序程序员负责在不同线程中同步来自不同库的调用非常困难,所以操作系统当然会进行同步。如果第一个线程仍然忙于注册窗口类,而第二个线程只是用尚未注册的窗口类创建窗口,会发生什么?