【发布时间】:2011-03-12 18:02:54
【问题描述】:
我正在尝试在我的最新项目中实现 MVP 模式。目前使用 C++ Builder 2007 附带的 VCL 库。我的想法是我不需要执行 Application->Run(),或者更糟糕的是 Application->CreateForm(),它创建一个主窗体并在该窗体上循环。我不想要一个主窗体,我想要一个主 Presenter。
然后我的问题变成了如何创建线程化的 TForms?
选项 1: 如果只有一个消息循环(Presenter),那么我系统中的每个随机线程都必须向这个主线程发布一条消息并让它创建表单。
选项 2: 每个表单都有自己的消息循环。现在随机线程可以根据需要新建和删除它们。发布消息仍然用于它们之间的通信。
如果推荐选项 2,是否有人对实施此方法有任何建议?
编辑: 如何更改以下内容以允许使用 new 创建表单并仍然允许循环工作?
// Start VCL library
pApplication->Initialize();
// Create the Main form and assign the MainForm property
pApplication->CreateForm(__classid(TForm1), &pFormMain);
// Show the form
pFormMain->Show();
// Run the loop
pApplication->Run();
【问题讨论】:
-
MVP 模式绝不需要或指定线程。你必须有一个消息循环。所有窗口都应该在一个线程上创建。不要让随机线程创建窗口。偏离这些规则会给你带来很大的麻烦。
-
我认为 TApplication 已经充当了演示者,而实现它最多只能让您重新发明轮子。 :)
-
@Hans,明智的话,我会按照你的建议去做。 @TommyA,是的,在某种程度上是这样,但它太严格了,这就是为什么我要问@Ken White 的问题。
标签: c++ multithreading c++builder vcl message-pump