¸ßµÈѧУ¼ÆËã»ú²Ù×÷ϵͳʵÑ鱨¸æ×îÖÕ´ð°¸ - ͼÎÄ ÁªÏµ¿Í·þ

·¢²¼Ê±¼ä : ÐÇÆÚÈÕ ÎÄÕ¸ߵÈѧУ¼ÆËã»ú²Ù×÷ϵͳʵÑ鱨¸æ×îÖÕ´ð°¸ - ͼÎĸüÐÂÍê±Ï¿ªÊ¼ÔĶÁ561c6d116c175f0e7cd13797

DWORD dwDesiredAccess, // ·ÃÎÊ·½Ê½ DWORD dwShareMode, // ¹²Ïíģʽ

LPSECURITY_ATTRIBUTES lpSecurityAttributes, /ÉèΪNULL DWORD dwCreationDisposition, /// ´´½¨·½Ê½ DWORD dwFlagsAndAttributes, // ÊôÐÔ HANDLE hTemplateFile // ÎÞÄ£°åÎļþ );

´´½¨Ïß³ÌʵÀýʹÓõĺ¯ÊýÊÇ£ºCreateThread£¨£©

2£©ÎļþµÄ¶ÁºÍд²Ù×÷·Ö±ðʹÓÃÁËÄĸöAPIº¯Êý£¿ ¶ÁÈ¡Îļþ£º

BOOL ReadFile(

HANDLE hFile, //ÎļþµÄ¾ä±ú

LPVOID lpBuffer, //ÓÃÓÚ±£´æ¶ÁÈëÊý¾ÝµÄÒ»¸ö»º³åÇø DWORD nNumberOfBytesToRead, //Òª¶ÁÈëµÄ×Ö·ûÊý

LPDWORD lpNumberOfBytesRead, //Ö¸Ïòʵ¼Ê¶ÁÈ¡×Ö½ÚÊýµÄÖ¸Õë LPOVERLAPPED lpOverlapped //ÈçÎļþ´ò¿ªÊ±Ö¸¶¨ÁË

FILE_FLAG_OVERLAPPED£¬ÄÇô±ØÐ룬ÓÃÕâ¸ö²ÎÊýÒýÓÃÒ»¸öÌØÊâµÄ½á¹¹¡£¸Ã½á¹¹¶¨ÒåÁËÒ»´ÎÒì²½¶ÁÈ¡²Ù×÷¡£·ñÔò£¬Ó¦½«Õâ¸ö²ÎÊýÉèΪNULL

);

дÈëÎļþ£º BOOL WriteFile(

HANDLE hFile, // Îļþ¾ä±ú

LPCVOID lpBuffer, // Êý¾Ý»º´æÇøÖ¸Õë

DWORD nNumberOfBytesToWrite, // ÄãҪдµÄ×Ö½ÚÊý

LPDWORD lpNumberOfBytesWritten, // ÓÃÓÚ±£´æʵ¼ÊдÈë×Ö½ÚÊýµÄ´æ´¢ÇøÓòµÄÖ¸Õë

LPOVERLAPPED lpOverlapped // OVERLAPPED½á¹¹ÌåÖ¸Õë

);

3£©ÔÚ³ÌÐòÖУ¬ÖØÖÃÎļþʹÓÃÁËÄÄÒ»¸öº¯Êý£¿ ʹÓÃCloseHandle()º¯Êý¡£

2. ÎļþÓ³Éä¶ÔÏó

ÔÚÏ̼߳äʹÓõÄÓÉҳʽÎļþÖ§³ÖµÄÎļþÓ³Éä¶ÔÏ󣬴ÓÖпÉÒÔ¿´³öÀûÓÃÄÚ´æÓ³ÉäÎļþ±ÈʹÓÃפÁôÔÚ´ÅÅÌÉϵÄÎļþ¶ÔÏó¸üΪ¼òµ¥£¬ÆäÖеĽø³Ì»¹Ê¹ÓÃÁË»¥³âÐźÅÁ¿£¬ÒÔʹ¹«Æ½µØ·ÃÎÊÎļþÓ³Éä¶ÔÏó£¬È»ºó£¬µ±Ã¿¸öÏ̶߳¼ÊÍ·Åʱ£¬³ÌÐò½«ÎļþµÄÊÓͼӳÉäµ½ÎļþÉϲ¢Ôö¼ÓÊý¾ÝµÄÖµ¡£

²½Öè1£ºÔÚ¹¤¾ßÀ¸µ¥»÷¡°Ð½¨¡±°´Å¥£¬±àд´úÂë±£´æΪ4-2.cpp¡£ ʵÏÖ¹¦ÄÜ£ºÑÝʾʹÓÃÓ³ÉäÎļþµÄÄÚ´æ½»»»Êý¾ÝµÄÏß³Ì

²Î¿¼ÀàÓ뺯Êý£ºwindows.h¡¢iostream¡¢WaitForSingleObject()¡¢MapViewOfFile(£©¡¢UnmapViewOfFile()¡¢ ReleaseMutex()¡¢MakeSharedFile()¡¢CreateFileMapping(£©¡¢ZeroMemory()¡£

²½Öè2£ºµ¥»÷¡°Build¡±²Ëµ¥Öеġ°Compile 4-2.cpp¡±ÃüÁÔÙµ¥»÷¡°ÊÇ¡±°´Å¥È·ÈÏ£¬ÏµÍ³¶Ô4-2.cpp½øÐбàÒë¡£

²½Öè3£º±àÒëÍê³Éºó£¬µ¥»÷¡°Build¡±²Ëµ¥Öеġ°Build 4-2.exe¡±ÃüÁ½¨Á¢4-2.exe¿ÉÖ´ÐÐÎļþ¡£

²Ù×÷ÄÜ·ñÕý³£½øÐУ¬Èç¹û²»ÐУ¬Ô­ÒòÊÇʲô£¿ ½â£º³ÌÐòÄÜÕý³£ÔËÐС£µ«ÊÇ»á³öÏÖÔËÐнá¹û´íÎó¡£

²½Öè4£ºÔÚ¹¤¾ßÀ¸µ¥»÷¡°Execute program¡±°´Å¥£¬Ö´ÐÐ4-2.exe³ÌÐò¡£

ÔËÐнá¹û£¨Èç¹û²»³É¹¦£¬Ô­ÒòÊÇʲô£¿£©£º

ÔÚ³ÌÐòÐÞ¸Ä֮ǰ£ºÊä³ö½á¹ûÊÇ£º

Óɴ˿ɼûÔËÐнá¹û³öÏÖ´íÎó¡£

Ð޸ĴíÎó£º if (nTotal == 1) {

:: Sleep(1500) ;//Ìí¼ÓÕâÒ»¾ä

std :: cout << \

:: WaitForSingleObject(hThread, INFINITE) ; } ³ÌÐòÐÞ¸ÄÖ®ºó£º

°´ÕÕʵÑéµÄÒªÇó½«:: Sleep(500) ; Óï¾ä×¢ÊÍÖ®ºó·¢ÏÖ³ÌÐòÖ´ÐеĹý³Ì½«»áÁ¢¼´³öÏÖÖ´Ðнá¹û£¬×îºóÏÔʾÕýÈ·µÄÊä³ö½á¹û¡£ Çë»Ø´ð£º

1£©³ÌÐòÖÐÓÃÀ´´´½¨Ò»¸öÎļþÓ³Éä¶ÔÏóµÄϵͳAPIº¯ÊýÊÇʲô£¿

ÔËÓÃCreateFileMapping()º¯Êý

2£©ÔÚÎļþÓ³ÉäÉÏ´´½¨ºÍ¹Ø±ÕÎļþÊÓͼ·Ö±ðʹÓÃÁËÄÄÒ»¸öϵͳº¯Êý£¿

a.´´½¨ÎļþÊÔͼ£ºMapViewOfFile£¨£©

b. ¹Ø±ÕÎļþÊÓͼ£ºUnmapViewOfFile£¨£©

3£©Ìî¿Õ£º

ͨ¹ý£¨CreateFileMapping()£©º¯Êý´´½¨Ò»¸öСÐ͵ÄÎļþÓ³Éä¶ÔÏó£¨hMapping£©£¬½Ó×Å£¬Ê¹ÏµÍ³APIº¯Êý£¨CreateMutex£©ÔÙ´´½¨Ò»¸ö±£»¤ÆäÓ¦ÓõĻ¥³âÐźÅÁ¿£¨g_hMutexMapping£©¡£È»ºó£¬Ó¦ÓóÌÐò´´½¨100¸öỊ̈߳¬Ã¿¸ö¶¼ÔÊÐí½øÐÐͬÑùµÄ½ø³Ì£¬¼´£ºÍ¨¹ý»¥Ìå»ñµÃ·ÃÎÊȨ£¬Õâ¸ö²Ù×÷ÊÇÓÉÓï¾ä£º

g_hMutexMapping = :: CreateMutex(NULL, FALSE, NULL) ; ʵÏֵġ£ÔÙͨ¹ýº¯Êý£¨MapViewOfFile£¨£©£©²Ù×÷½«ÊÓͼӳÉäµ½Îļþ£¬½«¸ß32λ¿´×÷ÓзûºÅÕûÊý£¬½«¸ÃÊýÖµÔö¼Ó£¨¼´ÃüÁ ++ (* pnData) ; £©£¬ÔÙ½«ÐÂÊýÖµÏÔʾÔÚ¿ØÖÆ̨ÉÏ£¬Ã¿¸öÏß³ÌÇå³ýÎļþµÄÊÓͼ²¢ÔÚÍ˳ö֮ǰÊÍ·Å»¥³âÐźÅÁ¿µÄÓï¾äÊÇ£º :: UnmapViewOfFile(pFile) ; :: ReleaseMutex(g_hMutexMapping) ;£¬µ±Ïß³ÌÍê³Éʱ£¬Ó¦ÓóÌÐò¹Ø±Õ²¢Í˳ö¡£

4.5 ʵÑé×ܽá

1.

Ê×ÏȶÔÓÚ4-1

¶ÔÓÚ³ÌÐòÖÐÓõ½µÄw2kdg.Fileobj.file.data.txtÎļþ£¬ÓÃGetTempPath£¨£©Õâ¸öº¯Êý¿ÉÒÔ»ñµÃϵͳµÄÁÙʱ»º´æµØÖ·¡£¼´£ºÔÚ

2. 3.

ÈÏʶºÍÊìϤÁËCreateFileMapping£¬UnmapViewOfFile£¬MapViewOfFileµÈAPIº¯Êý¡£

¶ÔÓÚ4-2.cpp£¬³ÌÐò´´½¨Ò»¸ö»¥³âÌ壬Õâ¸ö»¥³âÌå²»Äܱ»¼Ì³Ð£¬²»ÓÉ´´½¨Õß³õʼ»¯£¬Ã»ÓÐÃû×Ö£¨¸ù¾Ý²ÎÊý¾ö¶¨£©¡£È»ºó´´½¨½ø³Ì£¬Ö´ÐÐThreadProc£¨£©º¯Êý£¬µÈ´ýÉÏÒ»¸ö½ø³Ì¶Ô»¥³âÌåµÄʹÓÃÍê±Ï£¬È»ºó´´½¨Ó³É䣬³ÌÐòͨ¹ýÓ³ÉäÐÞ¸ÄÁ˽ø³ÌµÄÖµ£¬È»ºóÊä³ö£¬È»ºó½â³ýÓ³É䣬ÊÍ·Å»¥³âÌå¡£

4.6 ʵÑéÆÀ¼Û£¨½Ìʦ£©

ʵÑé5 ´æ´¢¹ÜÀí

Ìá¸ßWindows 2000ÄÚ´æÐÔÄÜ

(ʵÑé¹À¼Æʱ¼ä£º50·ÖÖÓ)

5.1 ±³¾°ÖªÊ¶

ºÄ¾¡ÄÚ´æÊÇWindows 2000 ϵͳÖÐ×î³£¼ûµÄÎÊÌâÖ®Ò»£¬µ±ÏµÍ³ºÄ¾¡ÄÚ´æʱ£¬ËùÓнø³Ì¶ÔÄÚ´æµÄ×ÜÐèÇ󳬳öÁËϵͳµÄÎïÀíÄÚ´æ×ÜÁ¿£¬Ëæºó£¬Windows 2000±ØÐë½èÖúËüµÄÐéÄâÄÚ´æÀ´Î¬³ÖϵͳºÍ½ø³ÌµÄÔËÐУ¬ÐéÄâÄÚ´æ»úÖÆÊÇWindows 2000²Ù×÷ϵͳµÄÖØÒª×é³É²¿·Ö£¬µ«ËüµÄËٶȱÈÎïÀíÄÚ´æÂýµÃ¶à£¬Òò´Ë£¬Ó¦¸Ã¾¡Á¿±ÜÃâºÄ¾¡ÎïÀíÄÚ´æµÄ×ÊÔ´£¬ÒÔÃâµ¼ÖÂÐÔÄÜϽµ¡£

½â¾öÄÚ´æ²»×ãÎÊÌâµÄÒ»¸öÓÐЧµÄ·½·¨¾ÍÊÇÌí¼Ó¸ü¶àµÄÄڴ棬µ«ÊÇ£¬Ò»µ©ÌṩÁ˸ü¶àµÄÄڴ棬Windows 2000ºÜ¿ÉÄÜ»áÁ¢¼´¡°ÍÌʳ¡±£¬¶øÊÂʵÉÏ£¬Ìí¼Ó¸ü¶àµÄÄÚ´æ²¢·Ç×ÜÊÇ¿ÉÐеģ¬Ò²¿ÉÄÜÖ»ÊÇÍƳÙÁËʵ¼ÊÎÊ