建立程序
wchar cmdexe[max_path] = ;
_stprintf(cmdexe, _t("\"%s\" %s"), c***e, csparam); //"cmd /c \"%s\" \"%s\""
startupinfo si = ;
process_information pi;
si.dwflags = startf_useshowwindow; // 指定wshowwindow成員有效
si.wshowwindow = sw_normal; //此成員設為true的話則顯示新建程序的主視窗
bool rc = createprocess(
null, // 不在此指定可執行檔案的檔名
(lptstr)cmdexe,//命令列引數
null, // 預設程序安全性
null, // 預設程序安全性
false, // 指定當前程序內控制代碼不可以被子程序繼承
create_no_window,// 為新程序建立乙個新的控制台視窗 create_new_console
null, // 使用本程序的環境變數
null, // 使用本程序的驅動器和目錄
&si,
&pi) ;
if (!rc)
dw = getlasterror();
waitforsingleobject(pi.hprocess,infinite); //等待程序結束
dword lresult = 0;
getexitcodeprocess(pi.hprocess, &lresult); //獲取程序結束返回碼
if (pi.hprocess)
::closehandle(pi.hprocess);
if (pi.hthread)
::closehandle(pi.hthread);
#ifndef safe_close_handle
#define safe_close_handle(x) }
#endif
handle m_hevtstop = createevent(null, true, false, null);
dword dwthreadid;
handle m_hthread = createthread(null, 0, (lpthread_start_routine)procthread, null, 0, &dwthreadid);
建立的執行緒:
while (::waitforsingleobject(m_hevtstop, 100) != wait_object_0)
終止執行緒:
::setevent(m_hevtstop);
if (waitforsingleobject(m_hthread, 1000) == wait_timeout)
}safe_close_handle(m_hthread);
等待多個執行緒終止
#define devnum 20
dword dwthreadid;
handle
handle
[devnum]
; for (int i = 0; i != devnum;i++)
waitformultipleobjects(devnum, handle, true, infinite);
執行緒可以通過以下四種方式終止執行:
1:執行緒函式返回。
2:執行緒呼叫exitthread殺死自己。
3:其他執行緒呼叫terminatethread。
4:程序終止導致執行緒終止。
3.1:exitprocess,exitthread只能由本程序的其他執行緒呼叫。
主線程exitthread退出時子執行緒並不會退出。
3.2:terminateprocess和terminatethread卻可以由任何其他程序的執行緒呼叫,它的第乙個引數指定要終止程序的控制代碼。
但是terminatethread這種方式結束的執行緒清理工作(c++物件的析構)不會執行。只有程序結束時,該程序內所有執行緒所使用的資源都會被釋放。
而terminateprocess是非同步的,此函式呼叫後我們並不能保證程序已經被強行終止了。要確定程序是否終止可以呼叫waitforsingleobject函式,並傳入程序控制代碼。
其他:建議使用_beginthreadex和_endthreadex建立結束執行緒。
程序 執行緒 多執行緒相關總結
一 說說概念 1 程序 process 狹義定義 程序就是一段程式的執行過程。廣義定義 程序是乙個程式關於某個資料集合的一次執行。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。簡單的來講程序的概念主要有兩點 第一,程序是乙個實體。每乙個程序都有它自己...
Windows程序執行緒相關概念
需要程序的原因 多道程式在執行時,需要共享系統資源,從而導致各程式在執行過程中出現相互制約的關係,程式的執行表現出間斷性 非封閉性 不可再現性等特徵。傳統的程式本身是一組指令的集合,是乙個靜態的概念,無法描述程式在記憶體中的執 況,故引入程序的概念。多道程式併發執行,提高系統吞吐量和系統資源利用率 ...
mysql執行緒程序相關查詢
show full processlistt show processlist 執行結果如下 說明 id id標識,要kill乙個語句的時候很有用 use 當前連線使用者 host 顯示這個連線從哪個ip的哪個埠上發出 db 資料庫名 command 連線狀態,一般是休眠 sleep 查詢 quer...