创建窗口和线程 - 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++的主要内容,如果未能解决你的问题,请参考以下文章
将程序 (.exe) 作为线程执行 - Window C++
是否可以使用标准 C++ 线程而不是 FLTK 超时来更新窗口?