色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

多線程啟動停止暫停繼續

微云疏影 ? 來源:dotNet工控上位機 ? 作者:dotNet工控上位機 ? 2022-08-11 15:47 ? 次閱讀

前言

初學者學習編程時,很容易因為多線程出現各種問題,導致不敢使用多線程。但是多線程技術在做開發中,是不可忽視的一個技術,基本上我們實際應用中,每個項目都會使用多線程,所以多線程技術必須掌握。

為什么要用多線程

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

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

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

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

為什么不敢用多線程

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

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

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

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

線程的啟動停止

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

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

多線程啟動停止暫停繼續

所以任務方法如下:

多線程啟動停止暫停繼續

個對象就是CancellationTokenSource的對象,因此我們需要創建一個CancellationTokenSource對象cts:

多線程啟動停止暫停繼續

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

多線程啟動停止暫停繼續

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

多線程啟動停止暫停繼續

其實,說白了,就是通過cts來控制cts的IsCancellationRequested屬性,進而實現多線程的控制。

線程的暫停繼續

多線程的暫停繼續,.NET為我們提供了另外一個對象——ManualResetEvent,這個對象會有一個值,這個值是布爾類型,就像一個門閘一樣,True是打開門閘,False是關閉門閘,所以想要暫停多線程就調用這個對象的Reset方法,想要繼續多線程就調用這個對象的Set方法,使用非常簡單。

首先我們創建一下這個對象,可以通過構造方法,給這個對象賦初始值,我這里為True,這樣就能直接運行,不會阻塞。

多線程啟動停止暫停繼續

但是如果希望這個對象與多線程有所聯系,必須要在多線程的方法里體現這個對象的作用,這個是調用這個對象的WaitOne方法,表示在調用的地方阻塞住,通過判斷True或者False來決定是否繼續執行,就像大家開車過高速收費站一樣,即使現在普遍采用ETC了,在入口也需要減速,有一個ETC識別的過程,識別成功才會抬桿,識別識別,桿子是不會自動抬起的,這個是一樣的道理。

所以線程執行代碼如下:

多線程啟動停止暫停繼續

對比一下,其實就是加了一個manual.WaitOne()。

線程暫停代碼:

多線程啟動停止暫停繼續

線程繼續代碼:

多線程啟動停止暫停繼續

AutoResetEvent

AutoResetEvent和ManualResetEvent的用法非常相似,區別在于一個是手動,一個是自動,AutoResetEvent會在置位之后自動復位,這樣體現在多線程里,就是會只執行一次,就像大家進小區一樣,如果有10輛車在排隊,這時候如果自動模式,每次只能進一輛車,如果是手動模式,可以由保安控制門閘打開,等10輛車都進去之后,再由保安將門閘關注。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212666
  • 多線程
    +關注

    關注

    0

    文章

    278

    瀏覽量

    20052
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28444
收藏 人收藏

    評論

    相關推薦

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎介紹 什么是多線程 指的是在一個進程中同時運行多個線程,每個線程都可以獨立執行不同的任務或操作。 與單線程
    的頭像 發表于 09-30 17:07 ?984次閱讀

    多線程程序,如何設置停止

    是這樣的,我的程序是多線程的,前面板是4個獨立的測試窗口,程序框圖是4個while循環,我想在4個窗口都在等待開始測試時,可以停止整個程序,前面板只設定一個停止控件,哪位能提供下好的思路,謝謝了。
    發表于 10-20 11:39

    多線程解決思路一

    使用方法節點實現多線程,兩個線程之間的數據傳輸也都使用方法節點的方式實現。1、初始化時打開另一個線程。2、程序運行過程中實現對被調線程的實施讀寫。3、Write data按下后寫入對應
    發表于 07-06 17:21

    設計多線程和多核系統

    如果您的微控制器應用程序需要處理數字音頻,請考慮采用多線程方法。使用多線程設計方法可以使設計者以簡單的方式重用其部分設計。
    發表于 08-14 15:42 ?9次下載
    設計<b class='flag-5'>多線程</b>和多核系統

    linux多線程編程技術

    1 引言 線程(thread)技術早在60年代就被提出,但真正應用多線程到操作系統中去,是在80年代中期,solaris是這方面的佼佼者。傳統的 Unix也支持線程的概念,但是在一個進程
    發表于 10-24 16:01 ?5次下載

    多線程好還是單線程好?單線程多線程的區別 優缺點分析

    摘要:如今單線程多線程已經得到普遍運用,那么到底多線程好還是單線程好呢?單線程多線程的區別又
    發表于 12-08 09:33 ?8.1w次閱讀

    mfc多線程編程實例及代碼,mfc多線程間通信介紹

    摘要:本文主要以MFC多線程為中心,分別對MFC多線程的實例、MFC多線程之間的通信展開的一系列研究,下面我們來看看原文。
    發表于 12-08 15:23 ?1.8w次閱讀
    mfc<b class='flag-5'>多線程</b>編程實例及代碼,mfc<b class='flag-5'>多線程</b>間通信介紹

    什么是多線程編程?多線程編程基礎知識

    摘要:多線程編程是現代軟件技術中很重要的一個環節。要弄懂多線程,這就要牽涉到多進程。本文主要以多線程編程以及多線程編程相關知識而做出的一些結論。
    發表于 12-08 16:30 ?1.3w次閱讀

    Linux下的多線程編程

    線程呢?使用多線程到底有哪些好處?什么的系統應該選用多線程?我們首先必須回答這些問題。  使用多線程的理由之一是和進程相比,它是一種非常"節儉"的多任務操作方式。我們知道,在Linux
    發表于 04-02 14:43 ?619次閱讀

    LabWindows CVI中的多線程技術的詳細資料說明

    ,應用程序可以隨 時被暫停。使用多線 程技術,應用程序可 以把它的任務分配到 單獨的線程中執行。 在多線程程序中,操 作系統讓一個線程的 代碼執行一段時間(被稱為時間片) 后,會切換到
    發表于 10-15 17:24 ?29次下載

    SpringBoot實現多線程

    SpringBoot實現多線程
    的頭像 發表于 01-12 16:59 ?1862次閱讀
    SpringBoot實現<b class='flag-5'>多線程</b>

    Linux中多線程編程的知識點

    Hello、Hello大家好,我是木榮,今天我們繼續來聊一聊Linux中多線程編程中的重要知識點,詳細談談多線程中同步和互斥機制。
    發表于 04-26 17:27 ?620次閱讀
    Linux中<b class='flag-5'>多線程</b>編程的知識點

    labview AMC多線程

    labview_AMC多線程
    發表于 08-21 10:31 ?32次下載

    多線程如何保證數據的同步

    多線程編程是一種并發編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執行不同的任務,共享同一份數據。由于多線程并發執行的特點,會引發數據同步的問題,即保證多個
    的頭像 發表于 11-17 14:22 ?1297次閱讀

    mfc多線程編程實例

    (圖形用戶界面)應用程序的開發。在這篇文章中,我們將重點介紹MFC中的多線程編程。 多線程編程在軟件開發中非常重要,它可以實現程序的并發執行,提高程序的效率和響應速度。MFC提供了豐富的多線程支持,可以輕松地實現
    的頭像 發表于 12-01 14:29 ?1553次閱讀
    主站蜘蛛池模板: 苍井空教师BD在线观看全集 | 国产精品色午夜视频免费看 | 99九九免费热在线精品 | 亚洲AV久久无码精品九号软件 | 日本久久黄色 | 成人国产亚洲精品A区天堂蜜臀 | 东京热 百度影音 | gv肉片视频免费观看 | www.青青草原 | 久久久久免费视频 | 国产美女久久久久久久久久久 | 国产精品永久免费视频观看 | 亚洲国产成人精品无码区99 | 女人高潮久久久叫人喷水 | 国产露脸无码A区久久 | 三男强一女90分钟在线观看 | 欧美整片华人play | 老师的玉足高跟鞋满足我 | 人妻中文字幕乱人伦在线 | 久久久久久久久女黄9999 | 日本久久中文字幕精品 | 久久精品电影久久电影大全 | 亚洲精品国产高清嫩草影院 | 欧美高清video mr.sexo | 久久中文字幕免费视频 | 早乙女由依在线观看 | 成人在线免费看片 | 日本阿v片在线播放免费 | 九九久久久 | 我和黑帮老大第365天第2季在线 | 噜噜噜狠狠夜夜躁精品 | 久久国产av偷拍在线 | 亚洲中字幕永久在线观看 | 欧美精品AV精品一区视频 | 国产午夜视频在永久在线观看 | 伊人电院网 | 1000视频在线播放 | 杨幂视频在线观看1分30秒 | 亚洲精品有码在线观看 | 久久国产热视频99rev6 | 精品国产乱码久久久久久乱码 |