时间: 2021-07-31 作者:daque
在软硬件的开拓进程中,偶尔须要遏制少许步调不许同声运转,也即是多个步调间互斥运转(还囊括遏止同一步调运转多个范例)。对准这一题目,咱们在visual c++ 6.0中运用外存映照文献实行了多个步调间的互斥运转。 在报告简直的编制程序本领之前,让咱们先来看看和外存映照文献操纵相关的几个要害的因变量: 1)createfilemapping因变量为指定的文献创造一个文献映照东西,该因变量的原形如次: handle createfilemapping( handle hfile, // 用来映照的文献句柄 lpsecurity_attributes lpfilemappingattributes, // 外存映照文献的安定刻画符 dword flprotect, // 文献的养护办法 dword dwmaximumsizehigh, // 文献映照东西的最大长度的高32位 dword dwmaximumsizelow, // 最大长度的低32位 lpctstr lpname // 指定这个外存映照文献的名字 ); 2)mapviewoffile因变量将文献的视图映照到一个过程的地方空间上,归来lpvoid典型的外存南针,经过它,就不妨径直考察文献视图中的消息: lpvoid mapviewoffile( handle hfilemappingobjct, // 映照文献东西句柄 dword dwdesiredaccess, // 考察形式 dword dwfileoffsethigh, // 文献偏移地方的高32位 dword dwfileoffsetlow, // 文献偏移地方的低32位 dword dwnumberofbytestomap // 映照视图的巨细 ); 在visual c++ 6.0中咱们用默许办法天生鉴于对话框的运用步调,在步调的初始化阶段,在cwinapp派生类的initinstance因变量的发端处,增添以次代码: { handle hmap=createfilemapping((handle)0xffffffff, null, page—readwrite, 0, 128, ″mutexrunning″); if(hmap==null) // 即使创造波折 { afxmessagebox(″创造用来互斥运转的外存映照文献东西波折!″, mb—ok|mb—iconstop); return false; } else if(getlasterror()==error—already—exists) { lpvoid lpmem=mapviewoffile(hmap, file_map—write, 0,0,0); cstring str=(char?)lpmem; unmapviewoffile(lpmem); closehandle(hmap); afxmessagebox(str, mb—ok|mb—iconstop); return false; } else { lpvoid lpmem=mapviewoffile(hmap, file—map—write, 0,0,0); strcpy((char?)lpmem, ″xxx步调正在运转!″); unmapviewoffile(lpmem); } afxenablecontrolcontainer(); ...... //这边不妨在initinstance因变量结果returnfalse之前挪用 closehandle(hmap); //封闭外存映照文献东西句柄 return false; } 之上的步调在visual c++ 6.0中已调节和测试经过。