作業系統 執行緒與程序的操作(C )

2021-08-26 11:44:49 字數 3615 閱讀 2991

08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見:

通過查閱msdn中c#關於process類和thread類的內容設計如下要求的一段程式:

在程式中開啟兩個後台執行緒(background=false),分別控制兩個process類,用這兩個類分別迴圈開啟和關閉相應程序,並在前台面板中記錄相應的資訊

比如:開啟兩個後台執行緒a和b,在a執行緒中例項化乙個process類pa,在b執行緒中例項化乙個process類pb。然後兩個執行緒同時進入迴圈分別做如下操作:

用pa開啟記事本程式,並記錄記事本程序的所有可顯示資訊,然後關閉並記錄資訊,再開啟記事本程式,並記錄記事本程序的所有可顯示資訊,然後關閉並記錄資訊。。。。。。。。。。(做成死迴圈)記錄你所控制的程序的建立,執行,結束時的全部時間及pcb資訊

用pb開啟計算器程式,並記錄記事本程序的所有可顯示資訊,然後關閉並記錄資訊,再開啟記事本程式,並記錄記事本程序的所有可顯示資訊,然後關閉並記錄資訊。。。。。。。。。。(做成死迴圈)記錄你所控制的程序的建立,執行,結束時的全部時間及pcb資訊

附:前台窗體名稱為你的姓名與學號,所控制的程式不侷限為記事本和計算器,在完成基本內容的基礎上對程式作出功能修改的可加分

1.查閱msdn中c#關於process類和thread類

msdn中有process類詳盡的解釋及屬性方法介紹,並有例項(thread相對簡陋些),此處不再贅述。

process元件提供了對執行在計算機上程序的訪問。

程序是乙個執行的應用程式,或者說是乙個容器,應用程式執行後,就相當於將應用程式裝進容器(還可以裝載變數資料,引用的dll檔案等)。執行緒是作業系統向程序分配處理器時間的基本單位。執行緒可執行程序的任何**,包括當前由另一線程執行的部分。如啟動、停止、監視應用程式等。

2.建立後台執行緒a, 例項化乙個process類pa,迴圈開啟關閉記事本,並記錄資訊

thread a;

a = new thread(new threadstart(exenotepad));

a.isbackground = true;

a.start();

//宣告乙個委託,用以解決控制項繫結到特定執行緒丟擲的invalidoperationexception異常

delegate void setrtbhandler(string s);

private void setrtb(string s)

/// ///迴圈開啟、關閉記事本程式的程序¬

///

private void exenotepad()

; this.invoke(cal, new object );

settexthandler(settext), new object );

}else

pa.kill();

//停頓半秒

system.threading.thread.sleep(1000);

i++;}}

catch(exception ex)

}

3.得到程序相應資訊的函式

/// ///顯示程序相關資訊的函式

/// 函式中每條資訊的顯示都放在try catch語句中

/// 雖然比較冗餘,但提高互動性及顯示的規範性

///

///

///

private string printprocessinfo(process process)

catch(exception ex)

str += "程序名稱:";

trycatch (exception ex)

trycatch (exception ex)

trycatch (exception ex)

trycatch (exception ex)

str += "程序的載入模組:";

trycatch (exception ex)

str += "程序的專用記憶體大小:";

trycatch (exception ex)

str += "程序的虛擬記憶體大小:";

trycatch (exception ex)

str += "為程序分配的分頁記憶體量:";

trycatch (exception ex)

str += "分頁的系統記憶體大小:";

trycatch (exception ex)

str += "程序的虛擬記憶體分頁檔案最大記憶體量:";

trycatch (exception ex)

str += "程序的允許的最大工作集大小:";

trycatch (exception ex)

str += "程序的允許的最小工作集大小:";

trycatch (exception ex)

str += "程序的物理記憶體使用情況:";

trycatch (exception ex)

str += "程序的基本優先順序:";

trycatch (exception ex)

str += "程序的總體優先順序類別:";

trycatch (exception ex)

trycatch (exception ex)

return str;

}

4.同樣的方式建立執行緒b並例項化process類pb

5.附加功能:任務管理器模擬

private void getprocessinfo()

}catch(exception ex)

}

附加功能:儲存記錄資訊

private void 儲存toolstripmenuitem_click(object sender, eventargs e)

}

}catch(exception ex)

}

整體截圖

任務管理器截圖

實驗通過使用c#中process和thread類嘗試了一些程序執行緒的基本操作。對執行緒和程序的概念有了更具體的了解

2.同時感覺c#中將process和thread類都封裝的比較全面,很方便就可以做很多有用的處理。比如原來還以為會「很底層」的任務管理器的「山寨版」效果,用乙個process.getprocesses()也就出來了。另外索性嘗試了通過wmi技術進行系統管理及優化方面的程式設計,發現也很簡單。(鑑於有點跑題,報告中不多說了)

3.自己多執行緒程式設計的經驗並不多,實驗中委託的使用也是第一次嘗試。另外深刻意識到了異常處理的重要性,執行中時不時拋個異常出來,實在是讓人感覺很惱火的事兒。

4.感覺還有許多操作沒有仔細嘗試,如中斷執行緒interrupt()阻止join(),現在對基本的操作有個了大致的了解,等日後需要的時候再仔細研究吧。

作業系統 程序與執行緒

程序 作業系統結構的基礎,是乙個正在執行的程式 計算機中正在執行的程式例項 可以分配給處理器並由處理器執行的乙個實體 由單一順序的執行顯示,乙個當前狀態和一組相關的系統資源所描述的活動單元。程序切換 從正在執行的程序中收回處理器,然後再使待執行程序來占用處理器。這裡所說的從某個程序收回處理器,實質上...

作業系統 程序與執行緒

為什麼會有程序?以前的計算機效能較差,作業系統只支援單任務,也就是一次只能執行乙個任務,當這個任務執行完成之後,才能執行下乙個任務,例如msdos。當該任務進行io時,cpu會處於空閒狀態。隨著計算機效能增強,出現了多工作業系統,作業系統可以將多個任務同時載入到記憶體中,併發執行。當某個任務進行io...

作業系統 程序與執行緒

1 排程 在傳統的作業系統中,擁有資源的基本單位和獨立排程 分派的基本單位都是程序。而引入執行緒的作業系統,則把執行緒作為排程和分派的基本單位,而程序作為資源擁有的基本單位。2 併發性 在引入執行緒的作業系統中,程序之間可併發執行,在乙個程序中的多個執行緒亦可併發執行。3 擁有資源 程序都可以擁有資...