VC.NET写的MFC程序,程序初始化时,CreateFileMapping建立了一个共享内存区域用来通信。有个OnTimer函数,我在里面建立新的对象,其类型为我自己定义的一个结构体,对其一个整数元素赋值,然后写进共享内存。另有一个VC.NET写的带MFC的控制台程序SharedMemTestReciever,用同样的自定义结构体,从该共享内存中读取数据,却总是读不到,很奇怪。之前做了个SharedMemTestSender,与SharedMemTestReciever通信,用同样的方法,是成功的。
难道用在OnTimer里面有什么说道吗?另外我用的一个别人封装好的类,来实现文件映射的内存共享通信。
难道用在OnTimer里面有什么说道吗?另外我用的一个别人封装好的类,来实现文件映射的内存共享通信。
解决方案 »
- 线程中的定时器
- 关于数据库中图像在对话框中显示的问题
- CMainFrame框架 里面有两个窗口时,当前窗口焦点在,窗口1上时,用什么代码才可以触发,窗口2的焦点激活呢?
- 如何知道CreateDispatch(clsid, null)中的clsid是否有效?
- 怎么得到一文件所加载的所有DLL的文件地址?
- 非常菜的一个问题,希望不要笑话
- 求助:怎么可以实现每次都删除txt文件的开始一部分数据,保留后续数据?
- 网络编程的问题把我弄晕了,特来请教高手,问题可能很菜,请别见笑!
- 简单问题,送高分.用VC的WINSOCK6.0 CONTROL如何传送数值型DATA?
- TXT文件中的换行
- COM如何通过接口传出指针?
- 怎么解决直线会打折
class CFileMapping
{
public:
CFileMapping();
~CFileMapping(); // Operations
bool Initialize(LPCTSTR, int);
void Write(char*);
void Read(char*&);
void Dispose();private:
HANDLE m_hFileHandle;
LPVOID m_pViewOfFile;
int m_nFileSize;
}; 实现内存共享文件的操作有自定义的结构体:typedef struct tagRECTANGLE {
int x1; //起点横坐标
int x2; //终点横坐标
int y1; //起点纵坐标
int y2; //终点纵坐标
} RECTANGLE;typedef struct tagMYSTRUCT {
RECTANGLE rect;
BITMAP image;
HBITMAP pImage;
} FRAME;程序初始化时先调用m_myFileMapping.Initialize((LPCTSTR)"pipe",sizeof(FRAME))(成员变量m_myFileMapping是CFileMapping的),就先建立好了共享区域然后在OnTimer里面,
FRAME *m_pFrame=new FRAME();
m_pFrame->rect.x1=1000;
m_FileMapping.Write((char*)m_pFrame);可是在SharedMemTestReciever里面却读不到以上方法在SharedMemTestSender里面用了,基本一样,唯一不同的就是没有用OnTimer,而是一个按钮,点击后:for(int i=0;i<32000;i++)
{
FRAME *data=new FRAME();
data->rect.x1=i; if(m_FileMappingInitialed)
m_myFileMapping.Write((char*)data); delete data;
}循环的每一个数值SharedMemTestReciever都收到了
{
// TODO: 在此添加控件通知处理程序代码
FRAME *data=new FRAME();
data->rect.x1=m_nTimeCounter; if(m_FileMappingInitialed)
m_myFileMapping.Write((char*)data);
delete data; m_nTimeCounter++; CDialog::OnTimer(nIDEvent);
}