【发布时间】:2011-05-31 15:42:21
【问题描述】:
我正在编写一个多线程桌面应用程序。
一般
我不确定多线程对架构的影响。有很多关于架构的文献,但我不知道没有考虑到多线程。有很多关于多线程的低级内容(互斥体、信号量等)的文献,但我不知道描述这些概念是如何嵌入到架构中的。
您推荐哪些文献来填补这一空白?
特别是
我的申请包括
-
Presentation使用 GUI 工具包创建和管理对话框, -
Kernel了解应用程序的所有领域, -
Controller知道Kernel和Presentation并介于这两者之间。
更准确地说,文件的打开方式如下:
-
Presentation表示FileOpenCommand。 -
ApplicationController收到此信号并- 使用
ApplicationKernel创建File对象, - 使用
ApplicationPresentation创建FilePresentation对象, - 创建一个
FileController对象,将File和FilePresentation传递给构造函数。
- 使用
-
FileController在其File和FilePresentation上将自己注册为观察者。
假设File 提供了一个长时间运行的操作Init(),它不应阻塞用户界面。我想到了两种方法:
-
File::Init()返回一个封装线程的对象,可用于注册一个观察者,该观察者会收到有关进度、错误、完成等的通知。这使FileController(谁将成为观察者)承担了很多责任,因为它现在可以从主线程和工作线程访问。 - 对
Controller完全隐藏工作线程。File::Init()不会返回任何内容,但ApplicationKernel会发出主线程中长时间运行操作的创建、进度和错误的信号。这会通过ApplicationKernel拖累大量交流,将其变成类似神物的东西。
这两种方法中哪一种是桌面应用程序中多线程的常用方法(如果有)?您推荐哪些替代方法?
【问题讨论】:
-
自从您为这个问题开始赏金以来,您似乎对给定的答案不满意。但是,您尚未编辑您的问题以澄清您想要的哪些信息未在答案中给出。它将帮助其他用户回答您的问题以赚取赏金。
标签: multithreading language-agnostic architecture desktop-application