程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Process進程 ; Thread線程

Process進程 ; Thread線程

編輯:C++入門知識

Process進程 ; Thread線程


<>


前台線程和後台線程

InvokeHelper:跨線程訪問/修改主界面控件方法、屬性

C#線程用法及跨線程訪問

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace 進程Process
{
    /// 
    /// Process類是一個非靜態類。它裡面包含靜態成員和非靜態成員。靜態成員有類直接調用,非靜態成員有類的對象來調用
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            //每一個用戶程序都是一個進程。在.net中操作進程的這個類叫做Process
            Process[] pros = Process.GetProcesses(); //獲取當前計算機中正在運行的所有進程。存放到一個進程數組中(Process[] pros)

            foreach (var item in pros)
            {
                //item.Kill();//立即停止當前進程。即:殺死當前進程。這個不能亂用啊。寫在這個循環裡面,就殺掉了所有正在運行的進程了,MD用了一次給我電腦都關閉了,太危險了。

                Console.WriteLine(item); //將每一個進程輸出到控制台。
            }


            //通過進程來打開一些應用程序 //通過指定文檔或應用程序文件的名稱來啟動進程資源:參數是:要在進程中運行的文檔或應用程序文件的名稱。
            Process.Start("calc");  //打開計算器
            Process.Start("mspaint"); //打開繪圖工具
            Process.Start("iexplore","Http://www.baidu.com"); //打開浏覽器,打開百度


            //通過進程來打開一些文件
            Process p = new Process();

            //並指定啟動進程時使用的諸如應用程序或文檔的文件名。
            ProcessStartInfo psi = new ProcessStartInfo(@"C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe");

            //StartInfo:它表示啟動該進程時要使用的數據
            p.StartInfo=psi;
            p.Start();  //啟動進程
        }
    }
}


線程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Thread線程
{
    /// 
    /// 當一個程序啟動時,就有一個進程被操作系統(OS)創建,與此同時一個線程也立刻運行,該線程通常叫做程序的主線程(Main 
    /// Thread),因為它是程序開始時就執行的,如果你需要再創建線程,那麼創建的線程就是這個主線程的子線程。
    /// 
    /// 一個進程是由多個線程組成的。線程分為兩種,一種叫前台線程。另一種叫後台線程。
    /// 前台線程:應用程序必須運行完所有的前台線程才可以退出;(主線程就是屬於前台線程)
    /// 後台線程:而對於後台線程,應用程序則可以不考慮其是否已經運行完畢而直接退出,所有的後台線程在應用程序退出時都會自動結束。
    /// 
    /// 
    class Program
    {
        public static void Test()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }


        //單線程的也就是程序執行時,所跑的程序路徑(處理的東西)是連續順序下來的,必須前面的處理好,後面的才會執行到。(這樣容易發生“假死”等問題。例如:一個前台線程沒有執行完畢,程序怎麼都無法退出,卡在那裡不動,造成假死,非要等前台線程都執行完畢了,才能退出程序。又例如:一個控制台程序,程序一開始便啟動了10個線程,每個線程運行5秒鐘時間。由於線程的IsBackground屬性默認為false,即它們都是前台線程,所以盡管程序的主線程很快就運行結束了,但程序要到所有已啟動的線程都運行完畢才會結束)

        //而多線程的目的就是讓計算機“同時”做多件事,節約時間。多線程是一種提高程序運行效率和性能的常用技術
        static void Main(string[] args)
        {
            Console.WriteLine("我現在還不想吃飯"); //主線程完成輸出。--這是主線程干的事


            //創建一個線程。讓這個線程去執行Test()這個方法。(注意Test這個方法不要括號)
            //默認情況下我們創建的這個線程叫“前台線程”。我們也可以將他設為“後台線程”
            Thread th = new Thread(Test);        //--這是th這個線程干的事

            th.IsBackground = true;//將剛剛創建的th這個線程設為“後台線程”
                

            th.Start();//標記這個線程准備就緒了,可以隨時被CPU執行(線程什麼時候去執行有CPU決定,我們是不能手動的去調用線程的,我們能做的就是告訴CPU,這個線程已經准備好了,你可以隨時執行它。如果此時CPU很忙的話它依然執行不了這個線程,如果不忙的話就可能馬上來執行這個線程)

            Console.WriteLine("我要吃飯"); //主線程完成輸出  --這是主線程干的事

            for (int i = 101; i < 200; i++)
            {
                Console.WriteLine(i);  //主線程完成輸出  --這是主線程干的事
            }


            //在.net下是不允許跨線程訪問的。解決跨線程訪問的方法是:Control.CheckForIllegalCrossThreadCalls = false; 
            //這個CheckForIllegalCrossThreadCalls屬性指示是否捕獲對錯誤線程的調用,如果false 就表示不檢查對錯誤線程的調用。如果是true就表示檢查對錯誤線程的調用。【這個Control類是:WinForm中所有控件的基類】


            Thread.Sleep(3000);//讓當前線程停止3秒後再運行。
            Console.WriteLine("Hellow world");
        }

    }
}



  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved