程序,執行緒 相關問題

2021-07-22 05:12:00 字數 2248 閱讀 6245

建立程序

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...