青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-22  文章-0  trackbacks-0
在工程文件中, WinMain函數里加上以下代碼(此代碼在BCB6.0下運行):

HANDLE hMutex = CreateMutex(NULL, false"Process");
         
if (GetLastError() == ERROR_ALREADY_EXISTS)
         
{
            CloseHandle(hMutex);
            MessageBox(Application
->Handle, "程序已經在運行中,不能重復啟動!""提示", MB_OK +MB_ICONWARNING);
            Application
->Terminate();
            
return 0;
         }

         Application
->CreateForm(__classid(TForm1), &Form1);

主要使用到CreateMutex()函數和GetLastError()以及一個常量ERROR_ALREADY_EXISTS.

當然, 你的程序有窗體的話, 還可以使用FindWindow().

void *handle = FindWindow(NULL, WindowName.c_str()); 
if (handle!=NULL)
    
return 0


進程的互斥運行

  正常情況下,一個進程的運行一般是不會影響到其他正在運行的進程的。但是對于某些有特殊要求的如以獨占方式使用串行口等硬件設備的程序就要求在其進程運行期間不允許其他試圖使用此端口設備的程序運行的,而且此類程序通常也不允許運行同一個程序的多個實例。這就引出了進程互斥的問題。

  實現進程互斥的核心思想比較簡單:進程在啟動時首先檢查當前系統是否已經存在有此進程的實例,如果沒有,進程將成功創建并設置標識實例已經存在的標記。此后再創建進程時將會通過該標記而知曉其實例已經存在,從而保證進程在系統中只能存在一個實例。具體可以采取內存映射文件、有名事件量、有名互斥量以及全局共享變量等多種方法來實現。下面就分別對其中具有代表性的有名互斥量和全局共享變量這兩種方法進行介紹:

// 創建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");
// 檢查錯誤代碼
if (GetLastError() == ERROR_ALREADY_EXISTS) {
 
// 如果已有互斥量存在則釋放句柄并復位互斥量
 CloseHandle(m_hMutex);
 m_hMutex 
= NULL;
 
// 程序退出
 return FALSE;
}


上面這段代碼演示了有名互斥量在進程互斥中的用法。代碼的核心是CreateMutex()對有名互斥量的創建。CreateMutex()函數可用來創建一個有名或無名的互斥量對象,其函數原型為:

HANDLE CreateMutex(
 LPSECURITY_ATTRIBUTES lpMutexAttributes, 
// 指向安全屬性的指針
 BOOL bInitialOwner, // 初始化互斥對象的所有者
 LPCTSTR lpName // 指向互斥對象名的指針
);


如果函數成功執行,將返回一個互斥量對象的句柄。如果在CreateMutex()執行前已經存在有相同名字的互斥量,函數將返回這個已經存在互斥量的句柄,并且可以通過GetLastError()得到錯誤代碼ERROR_ALREADY_EXIST??梢?,通過對錯誤代碼ERROR_ALREADY_EXIST的檢測可以實現CreateMutex()對進程的互斥。

        建立互斥體,用來同步。如果一個線程獲取了互斥體,則要獲取該互斥體的第二個線程將被掛起,直到第一個線程釋放該互斥體。

參數
lpMutexAttributes
指向一個SECURITY_ATTRIBUTES結構的指針,這個結構決定互斥體句柄是否被子進程繼承。    
bInitialOwner
布爾類型,決定互斥體的創建者是否為擁有者
lpName
指向互斥體名字字符串的指針?;コ怏w可以有名字。
互斥體的好處是可以在進程間共享

心得體會:
    CreateMutex() 用于有獨占要求的程序 (在其進程運行期間不允許其他使用此端口設備的程序運行,或不允許同名程序運行)。如有同名程序運行,則通過 GetLastError()得到錯誤代碼 ERROR_ALREADY_EXIST。

剛才又執行了下得出的結果(程序名samp)
       一般情況下:一進入調試階段,進程管理器中就出現了samp進程,執行到CreateMutex時返回進程句柄,執行到if(GetLastError() == ERROR_ALREADY_EXISTS ) 進行判斷時,跳過不執行if中的內容,所以表示沒有互斥。
       調試之前先運行debug中的samp.exe再調試:一進入調試階段,進程管理器中就出現了兩個samp進程,執行到CreateMutex時返回進程句柄,執行到if(GetLastError() == ERROR_ALREADY_EXISTS ) 進行判斷時,執行if中的內容,表示有互斥。

posted on 2009-07-21 17:05 Bluesea 閱讀(21112) 評論(4)  編輯 收藏 引用 所屬分類: C/C++

評論:
# re: 防止程序啟動兩次的方法CreateMutex() 2011-06-17 17:28 | 小池
你好!我是C++builder的初學者,但是要解決這個防止程序重復打開的問題。
你的方法中CreateMutex(NULL, false, "Process"),其中"process"是什么?有什么特殊含義嗎?是通過檢測什么特征來檢測程序已運行?比如caption,或者其他特征。請問你這里檢測的是什么特征?
不知道我表達清楚沒?  回復  更多評論
  
# re: 防止程序啟動兩次的方法CreateMutex() 2011-06-17 17:30 | 小池
謝謝了!  回復  更多評論
  
# re: 防止程序啟動兩次的方法CreateMutex() [未登錄] 2011-08-11 17:25 | Micheal
這是里不是caption,應該是name@小池
  回復  更多評論
  
# re: 防止程序啟動兩次的方法CreateMutex() 2014-03-13 14:44 | 雄風哥
你好,為什么我在wince設備里執行這段代碼的時候 GetLastError()返回的是87呢? 始終不是0183  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品电影在线观看| 夜夜躁日日躁狠狠久久88av| 欧美成人dvd在线视频| 久久手机免费观看| 欧美激情aⅴ一区二区三区| 欧美一级二区| 中文av一区特黄| 免费在线看一区| 久久久91精品国产| 国产精品制服诱惑| 久久久噜噜噜久久狠狠50岁| 久久午夜影视| 国产欧美亚洲日本| 国产日韩欧美在线| 中国成人亚色综合网站| 午夜精品视频在线观看| 亚洲黄色av一区| 亚洲高清精品中出| 国产精品国产福利国产秒拍| 欧美一区二区在线看| 亚洲免费激情| 黄色国产精品| 亚洲一区二区精品在线| 欧美亚洲视频一区二区| 欧美日韩精品一区二区| 久久精品免费看| 国产欧美日韩视频一区二区| 亚洲风情亚aⅴ在线发布| 蜜桃av综合| 亚洲蜜桃精久久久久久久| 国产精品久久久久aaaa九色| 久久综合久久久久88| 在线看片日韩| 欧美在线播放一区二区| 亚洲欧美激情四射在线日 | 一本久久精品一区二区| 久久夜色精品国产欧美乱极品| 一区二区三区产品免费精品久久75| 性亚洲最疯狂xxxx高清| 国产精品欧美日韩| 午夜日韩视频| 国内精品国产成人| 在线日韩日本国产亚洲| 男人的天堂亚洲在线| 久久全国免费视频| 伊大人香蕉综合8在线视| 蜜桃av一区二区三区| 开元免费观看欧美电视剧网站| 日韩视频免费| 一区二区冒白浆视频| 国产精品国码视频| 美乳少妇欧美精品| 欧美成人一区二区| 在线看欧美日韩| 亚洲午夜精品17c| 国产一区二区三区在线观看视频| 免费欧美在线视频| 欧美日本亚洲韩国国产| 午夜精品久久99蜜桃的功能介绍| 久久亚洲精品一区| 亚洲免费观看在线观看| 亚洲天堂av在线免费观看| 黄色成人av网| 亚洲三级影院| 国产主播喷水一区二区| 亚洲国产精品激情在线观看 | 亚洲成人在线观看视频| 欧美激情四色 | 欧美亚州韩日在线看免费版国语版| 香蕉精品999视频一区二区| 亚洲欧美日韩国产综合在线| 曰韩精品一区二区| 亚洲一区www| 精品福利av| 日韩一级精品| 亚洲激情av| 午夜精品福利在线| 欧美一区二区三区视频在线| 在线日韩成人| 亚洲在线不卡| 国产视频一区二区在线观看| 99国产精品国产精品毛片| 尤物精品在线| 久久av资源网站| 欧美裸体一区二区三区| 久久久久久久久久码影片| 欧美黄色aaaa| 欧美日韩国产综合一区二区| 久久www成人_看片免费不卡| 久久久蜜桃精品| 国产精品伦一区| 噜噜噜噜噜久久久久久91| 欧美日韩成人综合在线一区二区| 免费成人高清| 国产精品每日更新| 亚洲午夜av| 欧美婷婷久久| 亚洲东热激情| 在线精品国产欧美| 欧美一区二区视频在线观看2020| 亚洲视屏在线播放| 欧美69视频| 欧美成人精精品一区二区频| 免费在线观看精品| 久久久人人人| 国产色婷婷国产综合在线理论片a| 亚洲日本va午夜在线电影| 国产日韩精品久久久| 日韩西西人体444www| 亚洲激情国产| 乱人伦精品视频在线观看| 欧美黄色免费网站| 亚洲高清在线| 欧美黄色精品| 91久久精品国产| 黄色欧美日韩| 欧美jizzhd精品欧美喷水 | 亚洲精品美女91| 亚洲午夜在线观看| 一本大道久久精品懂色aⅴ| 久久综合伊人77777尤物| 欧美第一黄色网| 亚洲激情影视| 欧美激情无毛| 亚洲女人天堂av| 欧美在线999| 亚洲精品欧美一区二区三区| 亚洲午夜久久久久久久久电影院| 欧美日韩不卡合集视频| 亚洲综合日韩| 久久久久久一区| 亚洲国产精品久久| 国产精品久久久久一区二区| 午夜精品久久久久99热蜜桃导演| 欧美成人日韩| 亚洲视频在线观看网站| 国产欧美视频在线观看| 欧美国产精品一区| 一区二区三区高清在线观看| 麻豆成人91精品二区三区| 亚洲精品偷拍| 国产精品sss| 乱码第一页成人| 中日韩午夜理伦电影免费| 欧美日韩亚洲综合在线| 欧美一区免费视频| 能在线观看的日韩av| 亚洲一区二区三区涩| 国产亚洲精品v| 欧美**字幕| 久久成人羞羞网站| 亚洲欧洲午夜| 久久一区亚洲| 亚洲一区二区三区中文字幕在线 | 国产日韩av一区二区| 久久精品电影| 亚洲欧洲日本在线| 老司机凹凸av亚洲导航| 一区二区三区导航| 国产精品第十页| 欧美日韩另类在线| 午夜久久电影网| 国产亚洲欧洲| 蜜桃av一区二区在线观看| 一区在线影院| 欧美性大战久久久久| 久久国产精品久久久久久电车| 亚洲高清不卡在线| 麻豆成人精品| 欧美在线黄色| 亚洲成色精品| 精品动漫3d一区二区三区免费| 欧美日韩成人在线观看| 欧美暴力喷水在线| 久久国产精品一区二区三区| 欧美国产三区| 免费亚洲婷婷| 久久精品国产综合精品| 亚洲欧美日韩爽爽影院| 亚洲精品看片| 激情成人综合网| 狠狠色狠狠色综合| 国产欧美一区二区三区沐欲| 国产精品久久网站| 欧美日韩在线播放一区| 免费中文日韩| 欧美激情国产高清| 美女国内精品自产拍在线播放| 麻豆精品视频| 欧美成人视屏| 女同性一区二区三区人了人一 | 在线中文字幕日韩| 亚洲第一毛片| 亚洲激精日韩激精欧美精品| 伊人久久亚洲美女图片| 狠狠色综合色区| 亚洲人永久免费| 亚洲精品国久久99热| 中日韩在线视频| 在线一区二区日韩|