前段时间,做了一个项目,涉及数据传输。项目实现方式有很多种,但不同的实现方式,对数据的传输方法不同,且各有优缺点。
下文就不同情况来如何选择数据传输(通讯)方式。
先说说需求,模块A获取测试数据,模块B将程序A获取的数据进行画图。
方式一、API方式
将 模块B封装为一个dll,然后供模块A调用,这样模块A就可以通过调用模块B封装的API将数据传给模块B。
优点
方便,实现简单。
缺点
只能在同一个线程中使用,且由于是同步方式,如果数据量特别大,或者模块B画图效率低下,引起线程卡死。
方式二、WM_COPYDATA消息
使用MFC封装消息OnCopyData,模块A将消息通过SendMessage方式发出,模块B监听WM_COPYDATA消息。
优点
1、方便,实现简单。
2、可以用于线程间通信,也可以进程间通讯
缺点
只能使用SendMessage,即同步线程,跟API方式一样会出现线程堵塞风险,且单次传输数据量有上限限制。
方式三、共享内存
MFC中有封装好的共享内存函数,定义好后,模块A直接将数据拷贝给共享内存变量,然后模块B直接读取共享变量即可。
优点
1、可以用于线程间,也可以用于进程间
2、数据量上限很高
3、可同步:模块A拷贝数据后,使用消息通知方式通知模块B,也可异步。
缺点
1、实现难度较高。
2、由于存在对同一块内存进行读写,需要加锁,否则会出现各种异常问题。