From 1476c2bc15b8dc3e08b08a48f405ceae66894d0c Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Fri, 14 Jul 2023 16:33:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=AD=98=E6=98=A0=E5=B0=84mremap?= =?UTF-8?q?=E5=9C=A8320G=E6=97=B6=E4=BC=9A=E5=A4=B1=E8=B4=A5=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=94=A8fwrite=EF=BC=8C=E7=BB=8F=E6=B5=8B?= =?UTF-8?q?=E8=AF=95980PRO=202=E4=B8=AAbin1=20=E9=87=87=E9=9B=8680?= =?UTF-8?q?=E5=88=86=E9=92=9F=E4=B8=8D=E4=BC=9A=E4=B8=A2=E5=B8=A7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source_Files/ximeaimager.cpp | 81 ++---------------------------------- 1 file changed, 3 insertions(+), 78 deletions(-) diff --git a/Source_Files/ximeaimager.cpp b/Source_Files/ximeaimager.cpp index f45f59d..7d2f3ed 100644 --- a/Source_Files/ximeaimager.cpp +++ b/Source_Files/ximeaimager.cpp @@ -938,29 +938,9 @@ WriteData2Disk::WriteData2Disk() void WriteData2Disk::write2Disk() { QString imageFileName=m_QbaseFileName+".bil"; -// FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b"); + FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b"); - int fd = open(imageFileName.toStdString().c_str(), O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); - - size_t fileSize = m_iFrameSizeInByte*(size_t)100*(size_t)60*(size_t)5; - size_t fileSizeIncrement = m_iFrameSizeInByte*(size_t)100*(size_t)60*(size_t)5; - if (lseek(fd, fileSize - 1, SEEK_SET) == -1) { - std::cerr << "Error calling lseek()\n"; - return; - } - if (write(fd, "", 1) == -1) { - std::cerr << "Error writing last byte of the file\n"; - return; - } - void* addr = mmap(nullptr, fileSize, PROT_WRITE, MAP_SHARED, fd, 0); - if (addr == MAP_FAILED) { - std::cerr << "Error mmapping the file\n"; - return; - } - - size_t sizeWrited2disk = 0; - int frameCounter = 0; int frameNumber; unsigned short * dataBuffer = new unsigned short[m_iFrameSizeInByte/2*m_iNumber_WriteDisk]; @@ -1002,71 +982,16 @@ void WriteData2Disk::write2Disk() // std::cout<<"WriteData2Disk::write2Disk-----------------------正在写磁盘!" << m_pool->max_size() <m_VideoWriter.release(); -// fclose(hFile); + fclose(hFile); delete[] dataBuffer; - - -// if (munmap(addr, fileSize) == -1) { -// std::cerr << "Error un-mmapping the file\n"; -// } - - // Resize the file to 4096 bytes - if (ftruncate(fd, sizeWrited2disk) == -1) { - std::cerr << "Error calling ftruncate()\n"; - return; - } - - // Remap the file with the new size - addr = mremap(addr, fileSize, sizeWrited2disk, MREMAP_MAYMOVE); - if (addr == MAP_FAILED) { - std::cerr << "Error calling mremap()\n"; - return; - } - - if (munmap(addr, sizeWrited2disk) == -1) { - std::cerr << "Error un-mmapping the file\n"; - } - - close(fd); - - std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,内存池可达到的最多元素数:" << m_pool->max_size() <