您好,登錄后才能下訂單哦!
#include?"pch.h" #include?<iostream> #include?<Windows.h> //線程同步:消息、事件、臨界區(不是內核對象)、互斥體 //創建互斥體對象,守護程序利用OpenMutex()函數檢測對方的互斥體對象是否存在,不存在則創建進程 //線程回調函數 //參數:程序名稱 DWORD?WINAPI?ThreadCheckProc(LPVOID?lParam)?{ STARTUPINFOA?si?=?{?sizeof(si)?}; PROCESS_INFORMATION?pi?=?{?0?}; HANDLE?hMutex; while?(true)?{ hMutex?=?OpenMutexA(MUTEX_ALL_ACCESS,?FALSE,?(LPCSTR)lParam); if?(!hMutex)?{ ????????//unicode下,用W版會失敗 CreateProcessA( (LPCSTR)lParam,? NULL,?NULL,?NULL, FALSE, CREATE_NEW_CONSOLE,? NULL,?NULL, &si,?&pi); WaitForSingleObject(pi.hProcess,?INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else?{ CloseHandle(hMutex); } Sleep(500); } } int?main() { DWORD?Tid; //創建自己的互斥體對象 CreateMutexA(NULL,?TRUE,?(LPCSTR)"p1.exe"); //創建線程檢測對方的互斥體 CreateThread(NULL,?0,?ThreadCheckProc,?(LPVOID*)"p2.exe",?0,?&Tid); while?(1)?{?Sleep(500);?}; return?0; }
#include?"pch.h" #include?<iostream> #include?<Windows.h> /線程回調函數 //參數:程序名稱 DWORD?WINAPI?ThreadCheckProc(LPVOID?lParam)?{ STARTUPINFOA?si?=?{?sizeof(si)?}; PROCESS_INFORMATION?pi?=?{?0?}; HANDLE?hMutex; while?(true)?{ hMutex?=?OpenMutexA(MUTEX_ALL_ACCESS,?FALSE,?(LPCSTR)lParam); if?(!hMutex)?{ ????????//unicode下,用W版會失敗 CreateProcessA( (LPCSTR)lParam,? NULL,?NULL,?NULL, FALSE, CREATE_NEW_CONSOLE,? NULL,?NULL, &si,?&pi); WaitForSingleObject(pi.hProcess,?INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else?{ CloseHandle(hMutex); } Sleep(500); } } int?main() { DWORD?Tid; //創建自己的互斥體對象 CreateMutexA(NULL,?TRUE,?(LPCSTR)"p2.exe"); //創建線程檢測對方的互斥體 CreateThread(NULL,?0,?ThreadCheckProc,?(LPVOID*)"p1.exe",?0,?&Tid); while?(1)?{?Sleep(500);?}; return?0; }
編譯環境:vs2017? unicode
修改生成的程序為p1.exe,p2.exe,并且p1.exe,p2.exe在同一路徑下,可以實現簡單的雙進程守護。
掛起其中的一個進程,可以實現全部關閉。或者,迅速關閉p1.exe,p2.exe亦可。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。