|
楼主 |
发表于 2020-12-15 14:00:01
|
显示全部楼层
to:爱德华德
呵呵,代码写的很详细.老兄辛苦了. 说说自己的看法,不妥的地方希望多多指教.
先说单件,在这里的情形中,我对它不支持,也不反对.
不支持: 一是它的穿透力太强,在每个device中出现,是不太好的主意.对于你的代码,我更喜欢这种方式:
class CDevice1:public IDevice //没误解吧? 呵呵
{
public:
CDevice1(IDeviceInterrupt* kernalFace);
protected:
IDeviceInterrupt* _kernalFace;
void OnInterrupt(void* parameter)
{
_kernalFace->OnDeviceInterrupt(parameter);
}
...
}
int main()
{...; IDevice* devFace1 = new CDevice1(CKernel::GetInstance()); ...}
二者,要费心考虑同步问题. 太多的Device均具备自己的线程, 都回调CWhat的话, 同步..对单件
来讲不仅在构造析构里要加锁同步,而且在OnDeviceInterrupt(void*)考虑更复杂的同步问题: 不能一把锁锁死,那样并发时10多个线程都在排队等待,这样效率太低,不能这么做啊.
不反对: 单件是蝎子拉屎--独一份,资源消耗要小,许多调用操作简洁,如果能处理好同步问题,也算不错的选择.
再说IDevice的问题. 不能因为咱们称呼一声"设备",就一定就得到一个非常美好的IDevice出来,
这是理想啊. CWhat想做的事情是非常实际的,有针对性的调用工作,就像OS告诉VGA,给我画个馅饼.
如果OS对声卡,对内存,对网卡喊"画馅饼"是讲不通的,因为VGA 声卡 内存虽然都是"设备",但从它们
所实现的功能上看,是不存在共性的. 这就是我一直所说的"这种情况决定了无法对所有设备抽出一个IDeviceFace这样的接口,无法实现!"
呵呵,我不是C出身,只是实际工作有点硬件倾向.
|
|