CreateMutex建立互斥體可以用於只運行進程的一個執行個體

來源:互聯網
上載者:User
CreateMutex作用

找出當前系統是否已經存在指定進程的執行個體。如果沒有則建立一個互斥體。CreateMutex()函數可用來建立一個有名或無名的互斥量對象,其函數原型為

VC聲明

HANDLE CreateMutex(
  LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全屬性的指標
  BOOLbInitialOwner, // 初始化互斥對象的所有者
  LPCTSTRlpName // 指向互斥對象名的指標
  );

編輯本段說明

建立一個互斥體(MUTEX)
  

傳回值
  Long,

如執行成功,就返回互斥體對象的控制代碼;零表示出錯。會設定GetLastError。即使返回的是一個有效控制代碼,但倘若指定的名字已經存在,GetLastError也會設為ERROR_ALREADY_EXISTS
  參數表
  參數 類型及說明
  lpMutexAttributes SECURITY_ATTRIBUTES,指定一個SECURITY_ATTRIBUTES結構,或傳遞零值(將參數聲明為ByVal As Long,並傳遞零值),表示使用不允許繼承的預設描述符
  bInitialOwner Long,如建立進程希望立即擁有互斥體,則設為TRUE。一個互斥體同時只能由一個線程擁有
  lpName String,指定互斥體對象的名字。用vbNullString建立一個未命名的互斥體對象。如已經存在擁有這個名字的一個事件,則開啟現有的已命名互斥體。這個名字可能不與現有的事件、訊號機、可等待計時器或檔案對應相符

編輯本段註解

一旦不再需要,注意必須用CloseHandle函數將互斥體控制代碼關閉。從屬於它的所有控制代碼都被關閉後,就會刪除對象
  進程中止前,一定要釋放互斥體,如不慎未採取這個措施,就會將這個互斥體標記為廢棄,並自動釋放所有權。共用這個互斥體的其他應用程式也許仍然能夠用它,但會接收到一個廢棄狀態資訊,指出上一個所有進程未能正常關閉。這種狀況是否會造成影響取決於涉及到的具體應用程式

編輯本段使用例子:

(1)、 h_mutex1=CreateMutex(NULL,FALSE,"mutex_for_readcount");//建立一個互斥體
  (2)、HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");// 檢查錯誤碼
  if (GetLastError() == ERROR_ALREADY_EXISTS)
  {
  // 如果已有互斥量存在則釋放控制代碼並複位互斥量
  CloseHandle(m_hMutex);
  m_hMutex = NULL;
  // 程式退出
  return FALSE;
  };
  //上面這段代碼示範了有名互斥量在進程互斥中的用法。代碼的核心是CreateMutex()對有名互斥量的建立。
  CreateMutex() 用於有獨佔要求的程式 (在其進程運行期間不允許其他使用此連接埠裝置的程式運行,或不允許同名程式運行)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.