我想在使用SetTimer()
函数创建的窗口上创建一个窗口并显示一些图像显示(如基于CreateWindow()
的动画)。但它应该在单独的线程上创建,并应保持活着,直到用户关闭它。我试过但没有成功。
EDITED
我只是用谷歌搜索我找到了这个链接How To Create Windows in a Multithreaded Application但是我想知道调用Window Procedure
时的一件事。如果它是由系统调用的,那么我如何从我的child thread
调用它。
答案 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)或窗口的线程。
因此,您还必须小心地在每个可能创建窗口的线程上放置一个消息循环,或者想要处理定时器。