背景:有多个线程需要用到一些数据,对数据的读取速度有较高要求。于是可以设置共享内存,让线程从共享内存中读取数据。
框架:MFC
开发平台:vs2015
语言:c++
主要涉及的函数有:CreateFileMapping( ),MapViewOfFile( ),OpenFileMapping( ) 和AfxBeginThread( ).
简单的逻辑结构就是:
需要注意的点:
1)只有创建了共享内存,才能被其它线程映射。刚开始的时候容易忽略,导致调用顺序有问题,而报出断点,或者写入冲突。调试的方法是,在共享内存的创建处打断点,debug时查看创建的共享内存的地址和引用的地址是不是同一个。
2)假如A线程创建了共享内存,并向其中写入数据。B1,B2,B3线程读取共享内存中的数据,则在B1,B2,B3线程中必须调用OpenFileMapping( )函数,获取共享内存的地址句柄,否则会报写入冲突,或者内存拒绝写入,内存无法访问等。总之共享内存句柄的获取和释放一定要注意,否则共享内存的地址句柄引用一定会出问题。