Win32 windows线程安全吗?

时间:2011-09-20 17:26:06

标签: c++ windows winapi

我想在一个线程上创建一个窗口,然后将该HWND迁移到将要执行的任意数量的线程之一。我的程序将有多个这样的窗口。这是可能的还是Win32 API不是为此而设计的?

4 个答案:

答案 0 :(得分:10)

是的,在某种程度上。

您可以从任何线程向HWND发送和发送消息。

http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx

尝试从另一个线程配置UI(例如添加控件)将非常糟糕。但是,如果您向窗口发送消息,则可以确保将在创建线程上处理该消息。

答案 1 :(得分:6)

不,这是不可能的。窗口用于其消息循环的线程(您称之为“正在执行”)在创建窗口时定义。您可以创建多个线程并从它们启动消息循环(从而在它们上创建窗口),但这通常被认为是危险的。

答案 2 :(得分:2)

不,这些调用没有并发检查。

答案 3 :(得分:2)

must be called from the same threadCreateWindowGetMessage(或其各自的等价物)有两个重要的来电。你的解决方案不会,所以这是错误的。

您可以在任何主题中调用PostMessageSendMessage有点危险,因为它阻塞了跨线程场景,并且可能会死锁。