在单独的线程中运行表单

时间:2013-03-04 10:38:18

标签: c++builder vcl c++builder-2010

假设我有一个表格Foo。 我如何创建一个在其自己的线程中运行的实例,并获得更新,即使主应用程序线程可能正忙着做其他事情?例如,处理阻塞网络通信或类似的东西。

我理解基础知识,我需要创建一个新线程,在该线程中创建表单实例等。但后来我认为我需要一个该线程/窗口的更新循环,我不确定如何应该看。

1 个答案:

答案 0 :(得分:1)

您不应在主要应用程序线程之外的线程中创建表单,因为Windows消息队列仅与此主线程相关联。 不同的想法:确保您的表单始终更新和响应,为繁忙的工作创建单独的线程,如处理阻止newtork通信等,而不是表单。在这种情况下,在创建新线程之后,主窗体继续从它的队列中抽取消息,而不同线程中的函数正在进行您需要的脏工作。当工作线程完成时,它可以使用PostMessage() WinAPI函数通知主线程结果。您应该只是在表单中为这些自定义消息提供处理程序,并且它们将无缝地与工作线程进行通信 此外,如果您的“繁忙工作”不是很复杂,您甚至可以在没有其他线程的情况下处理,通过在表单线程中运行您的工作,并且不时地调用ProcessMessages()函数,以保持表单更新。