VC++中實現程式互斥執行 (轉)
VC++中實現互斥執行
在的開發過程中,有時需要控制一些程式不能同時執行,也就是多個程式間互斥執行(還包括禁止同一程式執行多個例項)。針對這一問題,我們在Visual C++ 6.0中利用對映實現了多個程式間的互斥執行。
在講述具體的方法之前,讓我們先來看看和記憶體對映檔案操作有關的幾個重要的:
1)CreateFileMap函式為指定的檔案建立一個檔案對映,該函式的原型如下:
HANDLE CreateFileMapping(
HANDLE hFile, // 用於對映的檔案控制程式碼
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // 記憶體對映檔案的描述符
D 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中已透過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004499/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c++實現程式與執行緒的同步互斥C++執行緒
- VC++ 執行緒同步(轉)C++執行緒
- 使用互斥物件讓程式只執行一次 (轉)物件
- VC++實現撥號上網程式 (轉)C++
- 執行緒同步與互斥:互斥鎖執行緒
- 利用VC++程式設計實現程式自動啟動 (轉)C++程式設計
- 實現TypeScript中的互斥型別TypeScript型別
- python多執行緒程式設計3: 使用互斥鎖同步執行緒Python執行緒程式設計
- vc++生成程式不需要.net執行環境的可以執行exe程式的方法C++
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- 用VC++實現自繪按鈕控制 (轉)
- 用VC++實現上網撥號功能 (轉)C++
- 用VC++實現不規則視窗 (轉)C++
- Linux之執行緒互斥鎖Linux執行緒
- windows多執行緒同步--互斥量Windows執行緒
- Python 執行緒同步與互斥Python執行緒
- 在VC++ 6.0下利用訊息實現內部程式通訊 (轉)C++
- linux程式多執行緒互斥鎖的簡單使用Linux執行緒
- Java中利用管道實現執行緒間的通訊(轉)Java執行緒
- redhat 9.0 中任務自動執行的實現方式 (轉)Redhat
- VC++中STL的使用 (轉)C++
- Java中實現執行緒的方式Java執行緒
- Java中如何實現執行緒呢?Java執行緒
- VC++執行庫安裝難題C++
- 執行緒同步(windows平臺):互斥物件執行緒Windows物件
- windows多執行緒同步互斥--總結Windows執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- Java程式中的多執行緒(1)(轉)Java執行緒
- Java程式中的多執行緒(2)(轉)Java執行緒
- 用java的jwindow實現程式執行出的splash畫面。 (轉)Java
- 實現FTP多執行緒下載 (轉)FTP執行緒
- 在Vb下實現多執行緒 (轉)執行緒
- 實現手機直播原始碼中兩個執行緒依次執行的相關程式碼原始碼執行緒
- java基礎:執行緒與程式;執行緒的分工,協作,互斥;volatile關鍵字Java執行緒
- C++11多執行緒程式設計(二)——互斥鎖mutex用法C++執行緒程式設計Mutex
- VC中ftp協議實現多執行緒斷點續傳(轉)FTP協議執行緒斷點
- 多執行緒-多執行緒方式1的程式碼實現執行緒
- VC++多執行緒下記憶體操作的最佳化 (轉)C++執行緒記憶體