爬虫软件 apppython共享内存编程_windows下Python和C++交互之共享内
python和c++交互之共享内存
最近在学写爬⾍,python的⽹络是真的⽅便,但是有些功能要c++来实现,这⾥记录下python和c++共享内存的⼀些坑
环境:
仙剑3句柄无效python3.8
qt5.10
win10系统
python需要的库:
pip install pypiwin32
python建⽴并写共享内存
import win32event as w32e
import win32api as wapi
import mmapfile as mmf
import time
hEvent = w32e.CreateEvent(None , 0 , 0 , "Global\\MyAppName")
#写数据,操作它就像操作字符数组⼀样
pyMm = apfile(None , "MyAppName" ,1024)
if hEvent != None and pyMm != None:
for i in range(1, 10001):
w32e.SetEvent(hEvent)
dat = "helloword/" + str(i)+".jpg"
scalar发音
# pyMm.lock()
pyMm.de()); #只能写byte
pyMm.flush();
time.sleep(1)
print("...  "+dat)
print(pyMm.size())#看总共可⽤的字节
ll())#看当前⽤了多个个字节
pyMm.seek(0) #指针指向第0
#关闭
wapi.CloseHandle(hEvent)
pyMm.close()
c++读取
#include
#define BUF_SIZE 4096
HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,L"MyAppName");
if (hMapFile)
{
LPVOID lpBase = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);
// 将共享内存数据拷贝出来
char szBuffer[BUF_SIZE] = {0};
strcpy(szBuffer,(char*)lpBase);
printf("%s",szBuffer);
/
/ 解除⽂件映射
UnmapViewOfFile(lpBase);
// 关闭内存映射⽂件对象句柄
CloseHandle(hMapFile);
arm9开发板能做什么}
else
{
优化mysql数据库的方法
// 打开共享内存句柄失败
printf("OpenMapping Error");
}
return 0;
网站设计模板加源代码
qt读取,这个地⽅很坑,要记住不是qt创建的共享内存,想要读取,⼀律⽤setNativeKey这个⽅法来设置key QSharedMemory* sharememory;
sharememory = new QSharedMemory();
sharememory->setNativeKey("MyAppName");
while(1){
if (sharememory->attach())
{
qDebug() << "";
break;
}else{
qDebug()<
}
}
while(1){
//        // 从共享内存中读取数据
QBuffer buffer;
sharememory->lock();//给shareMemory枷锁
buffer.setData((char*)sharememory->data(),sharememory->size());//将shareMemeory⾥的数据放到buffer⾥sharememory->unlock();//将shareMemory解锁
//        sharememory->detach();//将shareMemeory与该进程分离
buffer.open(QBuffer::ReadOnly);
tt=QString(buffer.data());
qDebug()<
Sleep(500);
}
1.win10共享内存名最好加"Global"
2.qt读取不是qt创建的共享内存要⽤setNativeKey设置共享内存名

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。