创建窗口和线程 - C++

Posted

技术标签:

【中文标题】创建窗口和线程 - C++【英文标题】:Creating Windows and Threading - C++ 【发布时间】:2010-11-19 21:47:10 【问题描述】:

当使用CreateEx 创建一个新窗口时,它的代码是在它自己的线程中执行还是在它的父线程(即执行其实例化代码的线程)中执行?谢谢。

【问题讨论】:

你可以用调试器看看 这可能对你有帮助:support.microsoft.com/kb/90975/en-us 【参考方案1】:

窗口本身并不实际运行任何代码,所有代码都是从属于您自己代码的一部分的消息循环中调用的。尝试使用多个线程与 Windows UI 交互时可能会遇到巨大的问题,因此您应该始终在单个线程中响应消息。

【讨论】:

+1 表示“您应该始终在单个线程中回复消息。”【参考方案2】:

Windows 具有线程亲和性 - 请参阅 Raymond Chen 的 article 关于此问题。

【讨论】:

【参考方案3】:

CreateWindowEx() 不创建新线程。如果你想要一个新线程,你必须调用 _beginthreadex()(通常是首选)或CreateThread()。

如果您想知道,_beginthreadex() 优于 CreateThread(),因为前者会初始化 CRT 的部分,而后者不会。

【讨论】:

【参考方案4】:

不,创建窗口不要启动新线程

【讨论】:

谢谢。因第一个回答而被接受。【参考方案5】:

跨线程 GUI 的东西通常以灾难告终。 Windows 库通过抛出异常来积极阻止它。

即使允许,默认情况下 CreateWindowEx 也无法执行此操作,因为它会对您的代码做出一些非常大的假设(锁、线程安全等);而且大多数 Windows 开发可能本质上仍然是单线程的。

【讨论】:

以上是关于创建窗口和线程 - C++的主要内容,如果未能解决你的问题,请参考以下文章

在新窗口 C++ 中创建线程

将程序 (.exe) 作为线程执行 - Window C++

是否可以使用标准 C++ 线程而不是 FLTK 超时来更新窗口?

C ++从异步线程更新Windows窗口

如何通知尾部更新到 C++ 窗口中的线程? [读取全局变量的未缓存值]

什么时候在窗口上设置最顶层不起作用?