限制程式執行例項數 (轉)
限制一個同時只能執行一個例項的方法一般有兩種,即使用“訊號”與FindWindow,通常第一種方法較為,而第二種方法必須知道Window的CLASS(在MFC中是很痛苦的,而且一旦CLASS NAME變了以後程式也要跟著改),否則可能就會出錯。然而這兩種方法都只能限制程式執行一次,如果要控制程式執行次數,比如3次,則使用以上的兩種方法就會很困難。前段時間寫了一個HOOK,其中用到了共享變數,在這個程式寫完後我突發奇想,不知道這個東西在EXE中是否有用?想到了那就試一試吧,一試,果然蠻爽的,居然也行,當時就想到這樣一來如果要限制一個程式同時只能執行一個例項不是很簡單,試了一下,當然毫無疑問的程式只執行了一個,程式碼如下:
1、在一個CPP中所有函式實體外加入以下幾句
#pragma data_seg("SHARDAT")
HWND ghMainWnd=NULL; //必須初始化,儲存主視窗HANDLE
#pragma data_seg()
#pragma comment(linker,"/section:SHARDAT,RWS")
2、在你的主視窗的OnCreate中對 ghMainWnd賦值
ghMainWnd = GetSafeHwnd();
3、程式執行時(如Initinstance)判斷 ghMainWnd 是否為NULL
if( ghMainWnd!=NULL && IsWindow(ghMainWnd) )
{
SendMessage( ghMainWnd, WM_YOURMESSAGE, ...
return ...
}
怎麼樣,比第一種方法簡單多了吧,有了以上程式碼,要限制程式執行次數就簡單了,如下:
1、在一個CPP中所有函式實體外加入以下幾句
#pragma data_seg("SHARDAT")
HWND ghMainWnd[10]={}; //儲存已執行的視窗HANDLE,沒太多用
int gRuned=0;
#pragma data_seg()
#pragma comment(linker,"/section:SHARDAT,RWS")
2、在你的主視窗的OnCreate中對 ghMainWnd賦值
if( gRuned<10 )
ghMainWnd[gRuned] = GetSafeHwnd();
gRuned++;
3、注意,必須在適當的時候減小 gRuned, 如在OnDestroy中等
4、程式執行時(如Initinstance)判斷 ghMainWnd 是否為NULL
if( gRuned>=MAX_RUN )
{
SendMessage( ghMainWnd, WM_YOURMESSAGE, ...
return ...
}
注意:在對gRuned操作時要注意同步
其中MAX_RUN可以儲存到REG或INI中,根據不同情況來設定
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python程式和執行緒例項詳解Python執行緒
- 執行緒問題2(注意例項變數)執行緒變數
- Activiti的流程例項【ProcessInstance】與執行例項【Execution】
- Thread 併發執行例項thread
- 網頁倒數計時跳轉程式碼例項網頁
- 3.1.5.5 啟動例項到限制模式模式
- Linux中執行多個MySQL例項LinuxMySql
- docker 執行elasticsearch單例項(elasticsearch:7.12.0)DockerElasticsearch單例
- .net使用Task多執行緒執行任務 .net限制執行緒數量執行緒
- JavaScript取餘數程式碼例項JavaScript
- 唯一標識 Java 執行的例項Java
- 在Windows中執行多個MySQL例項WindowsMySql
- 執行caffe自帶的mnist例項教程
- NCF的Dapr應用例項的執行
- div前後翻轉效果程式碼例項
- CSS3旋轉效果程式碼例項CSSS3
- pytest(13)-多執行緒、多程式執行用例執行緒
- JavaScript倒數計時程式碼例項JavaScript
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- 全面助力銀行數字化轉型,銀行視覺化大屏例項展示視覺化
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- 【爬蟲】Heritrix 3.2安裝和執行例項爬蟲
- 例項後臺執行訓練或任務
- C#並行,多執行緒程式設計並行集合和PLINQ的例項講解並行執行緒程式設計
- pytest多程式/多執行緒執行測試用例執行緒
- 從例項程式碼講解Node.js Event loop執行機制(1.0.1)Node.jsOOP
- 一看就懂的python小程式-支援多執行緒聊天例項Python執行緒
- Oracle Restart 單例項執行root.sh報錯roothas.pl line 377【轉載】OracleREST單例
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- 刪除所有正在執行和退出的docker例項Docker
- 乾貨 例項 | 數字化時代的傳統行業轉型升級行業
- 深入淺出Win32多執行緒程式設計--之綜合例項Win32執行緒程式設計
- jdbc執行DML程式設計舉例JDBC程式設計
- 【多執行緒與高併發3】常用鎖例項執行緒
- Java 例項 - 如何檢視當前 Java 執行的版本?Java
- 例項詳解構建數倉中的行列轉換
- 如何將獨立例項轉換成叢集例項EU
- 舉例理解什麼是程式,執行緒執行緒
- 可變引數例項