在vc ++中创建子线程中的窗口

时间:2011-01-13 17:12:08

标签: winapi visual-studio-2010 process visual-c++

我想在使用SetTimer()函数创建的窗口上创建一个窗口并显示一些图像显示(如基于CreateWindow()的动画)。但它应该在单独的线程上创建,并应保持活着,直到用户关闭它。我试过但没有成功。

EDITED

我只是用谷歌搜索我找到了这个链接How To Create Windows in a Multithreaded Application但是我想知道调用Window Procedure时的一件事。如果它是由系统调用的,那么我如何从我的child thread调用它。

2 个答案:

答案 0 :(得分:1)

将您的用户界面保留在主Windows线程上。使用Windows API设置计时器不需要额外的线程(因为您的WndProc将获得计时器消息WM_TIMER)。

即使你有一个长时间运行的任务要执行,可能需要使用一个额外的线程,保持窗口在主线程上,在工作线程中完成工作,并通过更新回发到主线程。 / p>

答案 1 :(得分:1)

Windows中的Windows(由HWND代表)具有线程关联性。他们的WindowProc总是在创建它们的线程的上下文中调用。

因此,它们是在线程之间序列化调用的便捷方式,因为可以从应用程序中的任何线程调用PostMessage和SendMessage API,但WindowProc将在原始创建线程的上下文中执行。

因为发布到消息队列的WM_TIMER消息是SetTimer工作的机制,所以再次在多线程应用程序中调用SetTimer时需要小心 - 定时器消息将由调用线程处理(如果是hwnd参数是NULL)或窗口的线程。

因此,您还必须小心地在每个可能创建窗口的线程上放置一个消息循环,或者想要处理定时器。