我瘋狂地想着如何使用C++將信號發送到Windows上的外部.exe文件。 一個男人「user1764961」,建議使用Mutex,但我真的不明白它是如何工作的! 我也閱讀此頁:http://www.tutorialspoint.com/cplusplus/cpp_signal_handling.htm 但我不明白...嚮應用程序發送信號(Windows)
例如:我想關閉信號發送到「無窗」的.exe 我知道的一切名爲.exe如果有需要的細節。
我瘋狂地想着如何使用C++將信號發送到Windows上的外部.exe文件。 一個男人「user1764961」,建議使用Mutex,但我真的不明白它是如何工作的! 我也閱讀此頁:http://www.tutorialspoint.com/cplusplus/cpp_signal_handling.htm 但我不明白...嚮應用程序發送信號(Windows)
例如:我想關閉信號發送到「無窗」的.exe 我知道的一切名爲.exe如果有需要的細節。
試試這個。也不是最安全的(非常非常不安全),而是最簡單的方法來解決你的問題。
在應用程序被關閉做到這一點:
DWORD dwProcessID;
HANDLE hProcess, hMutex;
hProcess = GetCurrentProcess();
DuplicateHandle(hProcess, hProcess, hProcess, &hProcess, NULL, TRUE, DUPLICATE_SAME_ACCESS);
// write retrieved handle somewhere in file. let it be "C:\sample.txt"
// ...
hMutex = CreateMutex(NULL, TRUE, L"Look at me! I'm a scarry MUTEX");
//... Your code
// go close your video streams or do whatever you want
// ...
ReleaseMutex(hMutex);
在您的應用程序:
// so now the distant proc works and you now it
// it is time to terminate it.
HANDLE hMutex, hProcess;
// read hProcess from "C:\sample.txt"
hMutex = OpenMutex(SYNCHRONIZE, FALSE, L"Look at me! I'm scary MUTEX");
WaitForSingleObject(hMutex, INFINITE); //if your "video app" will not release the mutex you will wait forever.
TerminateProcess(hProcess, 0); //that's what you need
互斥爲核心對象。您可以將其視爲擁有者操控的交通燈。如果他們想要活路過度,行人應該服從它。
在給出的例子中有2個打開的問題。
首先是你不應該在文件中寫入進程句柄。那麼如何獲得流程句柄呢?那麼,看看here。其次,正如我之前所說,除非你是上帝,否則你不能永遠等下去。確保你的進程將釋放互斥或設置WaitForSingleObject(hMutex, TIME_INTERVAL)
。 TIME_INTERVAL是DWORD。只要選擇它。
我希望我的回答能幫助你。
什麼是結束信號?該術語不常用。忘掉所有關於信號的信息,並告訴我們你真正想要做什麼。 –
我想用DLL終止一個進程(一個正在運行的應用程序),但是關閉之前的應用程序需要停止錄製視頻流。 – LppEdd
聽起來你應該使用自動化API來做到這一點。 –