| 作者 |
内容 |
| lzl-xm |
请教多线程模式
假设使用一个抽象类CParent(包含一个消息处理函数dataHandle),各个功能类继承该类。有个CNet类专门负责从网络上接受数据,然后调用功能类的dataHandle处理。
因为有些处理可能比较慢,所以接收数据和处理数据应该用不同的线程来处理。
怎样的模式好呢?
有一个例子是,创建一个接收线程,然后接收线程发event,主程序等待event处理。这样好嘛?有更好的模式嘛?
顺便问一下,多线程怎么建模呢?
最后感谢一下,对我在这里第一个问题热心的大虾们,当天就能看到不少回复。csdn上也没有这么热情啊,太感谢你们了。 |
| 02/12/17 17:21 |
酷帖! 臭帖! 回复 |
|
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| smilemac |
生产者-消费者模式.
|
| 02/12/18 09:45 |
酷帖! 臭帖! 回复 |
|
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| hcode |
回复:
请教多线程模式
个人观点,探讨探讨
我通常使用在那个抽象类中,封装一个数据存储,和一个线程对象。而后提供两个接口,一个是数据处理接口,一个是数据插入接口。
具体实现是这样的:
对于需要处理的数据,我们也可以将其抽象,所以数据存储存储的是数据基类的引用。这样你可以插入各种派生数据子类对象到这个存储中。
线程对象的线程函数挂起在一个同步对象上,我们通常使用semaphore,得到信号后,调用基类的数据处理接口。
数据处理接口被线程对象调用,用于处理数据。该接口为纯虚,由子类实现特定的处理逻辑。
数据插入接口可以用于数据接收对象调用,将数据插入数据存储,同时,该接口在插入完成后,通知线程进行处理,例如release
semaphore.
至于建模,我觉得应该将模型分为静态和动态,只需在类图中表述静态模型,描述各个类之间的静态接口。而后使用序列图表示动态调用关系。至于线程我觉得属于实现范畴。是根据序列图等动态描述在实现时完成的。 |
| 02/12/18 14:32 |
酷帖! 臭帖! 回复 |
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| lzl-xm |
酷啊
以前就把它当成死锁的经典例子了,给100分。
不过我是想把线程接收、之后数据处理这个过程抽象出来,因为很多功能都是这个重复的步骤,例如实时的图像传输、声音传输、键盘鼠标的传送、视频流、配置信息等等。 |
| 02/12/18 14:45 |
酷帖! 臭帖! 回复 |
|
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| lzl-xm |
好的,我试试
挺抽象挺实用的,可以总结成模式哦,hcode线程模式:)。我就先作为实验对象咯,不过对用在自己的项目里还是有点模糊,以后还请大家多多指教。
刚刚发现大头像占了不少空间,影响其他贴子的阅读,很不好意思,以后就用小头像了虽然难看一点。 |
| 02/12/18 15:18 |
酷帖! 臭帖! 回复 |
|
酷帖评价: 臭帖评价: |
| 返回页首 |
|