
前言电气工程师初学上位机编程时 , 很容易因为多线程出现各种问题 , 导致不敢使用多线程 。 但是多线程技术在做开发中 , 是不可忽视的一个技术 , 基本上我们实际应用中 , 每个项目都会使用多线程 , 所以做上位机开发多线程技术必须掌握 。
为什么要用多线程随着工业的进步 , 现在的笔记本、台式机大都是双核的 , 4核、8核甚至16核 , 也很常见 , 如果是单线程的程序 , 那么在双核CPU上就浪费了50% , 在4核CPU上就浪费了75% 。
单核CPU上所谓的”多线程”那是假的多线程 , 同一时间处理器只会处理一段逻辑 , 只不过线程之间切换得比较快 , 看着像多个线程”同时”运行罢了 。
多核CPU上的多线程才是真正的多线程 , 它能让你的多段逻辑同时工作 , 多线程 , 可以真正发挥出多核CPU的优势来 , 达到充分利用CPU的目的 。
如果你做项目不使用多线程 , 不仅是技术的问题 , 也是对电脑资源的极大浪费 , 就像你买了一辆配置非常高的越野车 , 你仅仅只用它来日常代步一样 。
为什么不敢用多线程之前跟一些学员沟通时发现 , 很多学员在上位机程序中之所以不敢使用多线程 , 是因为之前出过问题 , 有种“一朝被蛇咬 , 十年怕井绳”的感觉 。
为什么多线程容易出问题 , 有个主要的原因在于多线程充满着“未知性” , 有的人使用时 , 发现代码并没有按照预想的流程在走 , 这其实是正常的 。
我们必须要明确一点 , 多线程确实是“不可控的” , 有某种意义上来说 , 多线程是靠CPU调度来执行的 , 并非人为去控制 。
我们所谓的控制多线程 , 仅仅是.NET框架开放了一些接口给开发者 , 这样可以相对性地间接控制多线程的启动停止暂停继续 。
线程的启动停止线程的启动停止 , 从.Net Framework 4.5开始 , Task提供了一个叫CancellationTokenSource的对象 , 可以使用它来对多线程的启停进行控制 。
首先 , 我们做一个线程任务 , 这个任务很简单 , 只是不断操作某个变量 , 每0.1秒加1 , 到一定值之后 , 重置为0 , 然后将这个值显示在界面上 , 界面如下所示:
所以任务方法如下:
/// <summary>
/// 多线程执行方法
/// </summary>
private void TaskMethod()
{
while (!cts.IsCancellationRequested)
{
CurrentValue++;
if (CurrentValue == 200)
{
CurrentValue = 0;
Thread.Sleep(100);
我们可以看到在方法里调用了一个cts对象 , 这个对象就是CancellationTokenSource的对象 , 因此我们需要创建一个CancellationTokenSource对象cts:
- 索尼|索尼电视就是最好的吗?
- 三星|没有人会在意你用的是索尼A9二代还是一代,靠作品说话
- 6月23日晚|九连发!索尼一大波电视新品发布:最高卖79999元
- |天玑9000有了新体验,索尼IMX800+30倍变焦,荣耀Magic4不香了
- 索尼|从4999元跌至3299元,8GB+256GB旗舰,不要利润了
- 去年|索尼万元HT-A9音箱被指频繁断连
- playstation5|索尼你学会了吗?油管大神魔改PS5:体积大幅缩小,散热还更好
- 一加科技|从3299降到1999元,索尼IMX766+三星E4屏,高端机跌成千元机
- MacBook Air|索尼使出杀手锏:环绕式无界屏+5600mAh,索尼大法好
- |索尼新品X95EK对比中国本土产品TCL X11,哪一款更吃香?
