前言电气工程师初学上位机编程时 , 很容易因为多线程出现各种问题 , 导致不敢使用多线程 。 但是多线程技术在做开发中 , 是不可忽视的一个技术 , 基本上我们实际应用中 , 每个项目都会使用多线程 , 所以做上位机开发多线程技术必须掌握 。
为什么要用多线程随着工业的进步 , 现在的笔记本、台式机大都是双核的 , 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:
- 魅族|一年后见!索尼+魅族,又让我多了个捡漏产品
- 索尼|60Hz屏手机卖3500元!老外评索尼Xperia 10 IV:续航惊人 价格太贵
- 索尼Xperia|红米官宣新机!“千元神机”?天玑8000+512G!
- 索尼Xperia|国产有对手了,索尼推出首款5000mAh+4nm新机,12G+512G要卖爆
- 索尼|开机BIOS语言提示
- 索尼Xperia|更多人气功能即将上线 魅族Flyme携手索尼Xperia持续深耕系统体验
- 索尼Xperia|万物皆可盘丨带上Xperia Touch,来一场炫酷屌炸天的操作吧!
- 索尼Xperia|关键参数基本确定,iPhone14Pro真是大赢家
- 索尼Xperia|索尼发布新一代微单手机 Xperia 1 IV
- 2022年5月11日|索尼xperia1iv,为什么每年都卖不好?