#include "mainwindow.h"
#include <QApplication>
#include <thread>
#include <iostream>
#include <windows.h>
#include <mutex>
using namespace std;
typedef struct
{
int head;
int length;
char data[1024] = {0};
}packet;
HANDLE g_handWrite = INVALID_HANDLE_VALUE;
HANDLE g_handRead = INVALID_HANDLE_VALUE;
void writeData()
{
packet *pack1 = nullptr;
g_handWrite = CreateFileMappingA(INVALID_HANDLE_VALUE,
nullptr,
PAGE_READWRITE,
0,
sizeof(packet),
"shareMemory");
if(g_handWrite != INVALID_HANDLE_VALUE)
{
pack1 = (packet*)MapViewOfFile(g_handWrite,
FILE_MAP_READ | FILE_MAP_WRITE,
0,
0,
sizeof (packet));
}
memset(pack1,0x00,sizeof(packet));
mutex mute;
while (1)
{
pack1->head += 1;
if(pack1->head >= 0xffffff)
{
break;
}
Sleep(500);
}
if(pack1)
{
::UnmapViewOfFile(pack1);
pack1 = nullptr;
}
if(g_handWrite != INVALID_HANDLE_VALUE)
{
::CloseHandle(g_handWrite);
g_handWrite = INVALID_HANDLE_VALUE;
}
}
void readData()
{
packet *pack = nullptr;
g_handRead = CreateFileMappingA(INVALID_HANDLE_VALUE,
nullptr,
PAGE_READWRITE,
0,
sizeof(packet),
"shareMemory");
if(g_handRead != INVALID_HANDLE_VALUE)
{
pack = (packet*)MapViewOfFile(g_handRead,
FILE_MAP_READ | FILE_MAP_WRITE,
0,
0,
sizeof (packet));
}
while (1)
{
cout << "head = " << pack->head << endl;
if(pack->head < 0)
{
break;
}
Sleep(100);
}
if(pack)
{
::UnmapViewOfFile(pack);
pack = nullptr;
}
if(g_handRead != INVALID_HANDLE_VALUE)
{
::CloseHandle(g_handRead);
g_handRead = INVALID_HANDLE_VALUE;
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
thread t2(readData);
t2.detach();
thread t1(writeData);
t1.join();
return a.exec();
}
win系统下共享内存通信示例
最新推荐文章于 2024-05-15 01:07:46 发布