色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲

常州機(jī)器視覺培訓(xùn)

常州上位機(jī)軟件開發(fā)

常州工業(yè)機(jī)器人編程設(shè)計培訓(xùn)

常州PLC培訓(xùn)

常州PLC

常州PLC編程培訓(xùn)

常州電工培訓(xùn)

常州和訊plc培訓(xùn)中心歡迎您!
當(dāng)前位置:網(wǎng)站首頁 > 新聞中心 新聞中心
C#多線程啟動停止暫停繼續(xù)(上)-常州上位機(jī)學(xué)習(xí),常州機(jī)器視覺學(xué)習(xí)
日期:2024-3-7 16:45:06人氣:  標(biāo)簽:常州上位機(jī)學(xué)習(xí) 常州機(jī)器視覺學(xué)習(xí)

前言

初學(xué)者學(xué)習(xí)編程時,很容易因為多線程出現(xiàn)各種問題,導(dǎo)致不敢使用多線程。但是多線程技術(shù)在做開發(fā)中,是不可忽視的一個技術(shù),基本上我們實際應(yīng)用中,每個項目都會使用多線程,所以多線程技術(shù)必須掌握。


為什么要用多線程

隨著工業(yè)的進(jìn)步,現(xiàn)在的筆記本、臺式機(jī)大都是雙核的,4核、8核甚至16核,也很常見,如果是單線程的程序,那么在雙核CPU上就浪費了50%,在4核CPU上就浪費了75%。

單核CPU上所謂的”多線程”那是假的多線程,同一時間處理器只會處理一段邏輯,只不過線程之間切換得比較快,看著像多個線程”同時”運行罷了。

多核CPU上的多線程才是真正的多線程,它能讓你的多段邏輯同時工作,多線程,可以真正發(fā)揮出多核CPU的優(yōu)勢來,達(dá)到充分利用CPU的目的。

如果你做項目不使用多線程,不僅是技術(shù)的問題,也是對電腦資源的極大浪費,就像你買了一輛配置非常高的越野車,你僅僅只用它來日常代步一樣。


為什么不敢用多線程

之前跟一些學(xué)員溝通時發(fā)現(xiàn),很多學(xué)員之所以不敢使用多線程,是因為之前出過問題,有種“一朝被蛇咬,十年怕井繩”的感覺。

為什么多線程容易出問題,有個主要的原因在于多線程充滿著“未知性”,有的人使用時,發(fā)現(xiàn)代碼并沒有按照預(yù)想的流程在走,這其實是正常的。

我們必須要明確一點,多線程確實是“不可控的”,有某種意義上來說,多線程是靠CPU調(diào)度來執(zhí)行的,并非人為去控制。

我們所謂的控制多線程,僅僅是.NET框架開放了一些接口給開發(fā)者,這樣可以相對性地間接控制多線程的啟動停止暫停繼續(xù)。

多線程的啟動停止

線程的啟動停止,從.Net Framework 4.5開始,Task提供了一個叫CancellationTokenSource的對象,可以使用它來對多線程的啟停進(jìn)行控制。


首先,我們做一個線程任務(wù),這個任務(wù)很簡單,只是不斷操作某個變量,每0.1秒加1,到一定值之后,重置為0,然后將這個值顯示在界面上,界面如下所示:

2.png

所以任務(wù)方法如下:


        /// <summary>

        /// 多線程執(zhí)行方法

        /// </summary>

        private void TaskMethod()

        {

            while (!cts.IsCancellationRequested)

            {

                CurrentValue++;

                if (CurrentValue == 200)

                {

                   CurrentValue = 0;

                }

                Thread.Sleep(100);

            }

        }

我們可以看到在方法里調(diào)用了一個cts對象,這個對象就是CancellationTokenSource的對象,因此我們需要創(chuàng)建一個CancellationTokenSource對象cts:


        /// <summary>

        /// 線程啟停控制

        /// </summary>

        private CancellationTokenSource cts;

然后在啟動線程按鈕的事件里,編寫代碼如下:


        private void btn_Start_Click(object sender, EventArgs e)

        {

            cts = new CancellationTokenSource();

            Task.Run(() =>

            {

                TaskMethod();

            }, cts.Token);

        }

停止線程按鈕的事件里,只需要調(diào)用cts的Cancel方法即可:


        private void btn_Stop_Click(object sender, EventArgs e)

        {

            cts.Cancel();

            CurrentValue = 0;

        }

其實,說白了,就是通過cts來控制cts的IsCancellationRequested屬性,進(jìn)而實現(xiàn)多線程的控制。

本文網(wǎng)址:
下一篇:沒有資料

相關(guān)信息:
版權(quán)所有 CopyRight 2006-2017 江蘇和訊自動化設(shè)備有限公司 常州自動化培訓(xùn)中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務(wù)廣場2號樓1409室
蘇ICP備14016686號-2 技術(shù)支持:常州山水網(wǎng)絡(luò)
本站關(guān)鍵詞:常州PLC培訓(xùn) 常州PLC編程培訓(xùn) 常州PLC編程 常州PLC培訓(xùn)班 網(wǎng)站地圖 網(wǎng)站標(biāo)簽
在線與我們?nèi)〉寐?lián)系
色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲