C#核心知识回顾——13.多线程、预处理器指令

news2024/10/6 5:58:16

1.多线程

了解线程前先了解进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动
是系统进行资源分配和调度的基本单位,是操作系统结构的基础
说人话:打开个应用程序就是在慢作系统上开启了一个进程
进程之间可以相互独立运行,互不干扰
进程之间也可以相互访问,操作

什么是线程
燥作系统能够进行运算调度的最小单位。
它被包含在进程之中,是进程中的实际运作单位
—条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程
我们目前写的程序都在主线程中

简单理解线程:
就是代码从上到下运行的一条“管道”

什么是多线程
我们可以通过代码开启新的线程
可以同时运行代码的多条“管道”就叫多线程

public class test : MonoBehaviour
{
    static bool isrun = true;
    private void Start()
    {
        //语法相关
        //线程类Thread
        //需要引用命名空间using System.Threading;
        //1.申明一个新的线程
        !!!注意线程执行的代码需要封装到一个函数中!!!/
        Thread t = new Thread(NewThread);

        //2.启动线程
        t.Start();

        //3.设置为后台线程
        //当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在运行
        //后台线程不会防止应用程序的进程被终止掉
        // 如果不设置为后台线程可能导致进程无法正常关闭
        t.IsBackground = true;

        // 4.关闭释放一个线程
        //如果开启的线程中不是死循环是能够结束的逻辑那么不用刻意的去关闭它
        //如果是死循环想要中止这个线程有两种方式
        //4.1-死循环中boo1标识
        isrun = false;

        //4.2-通过线程提供的方法(注意在.Net core版本中无法中止会报错)
        try
        {
            t.Abort();
        }
        catch { }

        //5.线程休眠
        //让线程休眠多少毫秒
        Thread.Sleep(500);
    }
    static void NewThread()
    {
        //新开线程 执行代码逻辑
        Debug.Log("start");
        while (isrun) {
            Debug.Log(0);
        }
    }
}

线程之间共享数据
多个线程使用的内存是共享的,都属于该应用程序(进程)
所以要注意当多线程同时操作同一片内存区域时可能会出问题
可以通过加锁的形式避免问题
lock(引用类型对象)

public class test : MonoBehaviour
{
    static bool isrun = true;
    static object obj = new object();
    private void Start()
    {        
        Thread t = new Thread(NewThread);
        t.Start();
        t.IsBackground = true;
        isrun = false;
        while (true)
        {
            lock (obj)
            {
                Debug.Log("100");
            }
        }
    }
    static void NewThread()
    {
        //新开线程 执行代码逻辑
        while (isrun) {
            lock (obj)
            {
                Debug.Log(0);
            }            
        }
    }
}

用多线程专门处理一些复杂耗时的逻辑

用途:寻路、网络通信。

2.预处理器指令

//定义一个符号
#define Unity4
#define Unity5
#define Unity2017
#define Unity2019
//取消定义一个符号
#undef Unity4

#define IOs
#define Android
#define PC

using System;
using UnityEngine;

public class test : MonoBehaviour
{
    private void Start()
    {
        #region 知识点一什么是编译器
        //编译器是一种翻译程序
        //它用于将源语言程序翻译为目标语言程序
        //源语言程序:某种程序设计语言写成的,比如C#、C、C++、Java等语言写的程序
        //目标语言程序:二进制数表示的伪机器代码写的程序
        #endregion
        #region 知识点二什么是预处理器指令
        //预处理器指令指导编译器在实际编译开始之前对信息进行预处理
        //预处理器指令都是以#开始
        //预处理器指令不是语句,所以它们不以分号;结束
        //目前我们经常用到的折叠代码块就是预处理器指令
        #endregion
        #region 知识点三常见的预处理器指令
        // 1
        //#define
        //定义一个符号,类似个没有值的变量
        //#undef
        //取消define定义的符号,让其失效
        //两者都是写在脚本文件最前面
        //一股配合if指令使用或配合特性

        // 2
        //#if
        //#elif
        //#else
        //#endif
        //和if语句规则一样,一般配合#define定义的符号使用
        //用于告诉编译器进行编译代码的流程控制
        //如果发现有Unity4这个符号那么其中包含的代码就会被编译器翻译
        //可以通过逻辑或和逻辑与进行多种符号的组合判断

      #if Unity4
        console.Write Line("版本为Unity4");
      # elif Unity2017&&I0S
        Console.Write Line("版本为unity2017");
        //#warning这个版本不合法
        //#error这个版本不准执行
      #else
         Debug.Log("其它版本");
      #endif
        // 3
        //#warning
        //#error        
        //告诉编译器
        //是报警告还是报错误
        //一般还是配合if使用
        #endregion
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vscode】解决 An SSH installation couldn‘t be found

【Vscode】解决 An SSH installation couldn‘t be found 背景描述:在vscode中使用ssh进行连接到时候,已经安装了ssh romote的plugin插件,但是在输入了ssh连接命令之后,仍然出现报错:an ssh installation could not be…

vue3+mapboxgl鼠标浮动显示cgcs2000

一、需求 鼠标在地图中浮动展示地图的经纬度,cgcs2000 xy 还有显示带号 二、实现效果 展示经度,纬度,x值,y值显示的是带号和y值 三、思路 3.1、mapbox获取经纬度方法 初始化地图后.on方法中有个mousemove方法 mapboxUtil._m…

leetcode:递增的三元子序列

递增的三元子序列 题解部分转自leetcode:Xzz medium 给你一个整数数组 nums &#xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k &#xff0c;使得 nums[i] < nums[j] < nums[k] &#xff0c;返回…

专享策略06 | 盘口策略CTP实盘版

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 大家好&#xff0c;我们在6月29日发布了盘口策略| 回测版&#xff0c;今天我们做好了CTP的实盘版本供俱乐部会员使用和玩耍&#xff0c;今天主要说明一下如何使用CTP实盘版本。 先回顾一…

线上展厅设计方案,个性化自主打造720漫游展厅

导语&#xff1a; 随着科技的不断进步&#xff0c;线上展厅作为一种新型的展示方式&#xff0c;在现代社会得到了广泛的应用。线上展厅通过虚拟技术和创新设计&#xff0c;突破了时间和地域的限制&#xff0c;为企业和观众带来了全新的展览体验。本文将重点探讨线上展厅的优势和…

【工具使用】STM32CubeMX-单ADC模式规则通道配置

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的ADC的配置及其相关知识。 二、…

6. Springboot快速回顾(集成Dubbo)

Dubbo是实现远程调用的一个框架&#xff0c;阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块&#xff0c;部署在不同的服务器上。若将公共模块集中部署在一台服务器上&#xff0c;可以方便其他服务器调用。因此&#xff0c;需要Dubbo。…

java代码实现自动录入数据

之前工作中遇到粘贴复制大量数据&#xff0c;研究一下java代码解放双手 模拟鼠标录入数据 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.0.RELEASE&…

本地私有化部署大模型RWKV-懒人包一键安装享受专属免费大模型-RWKV Runner

仓库地址&#xff1a;https://github.com/josStorer/RWKV-Runner 预设配置已经开启自定义CUDA算子加速&#xff0c;速度更快&#xff0c;且显存消耗更少。如果你遇到可能的兼容性问题&#xff0c;前往配置页面&#xff0c;关闭使用自定义CUDA算子加速 如果Windows Defender说这…

Flutter:架构概览

概览 Flutter本质上是一个跨平台的UI工具集&#xff0c;允许在各自操作系统上复用同样的代码。 尽可能提供原生体验的高性能和复用代码。 开发中&#xff0c;Flutter应用在一个VM上运行&#xff0c;使得可在保留状态且无需重新编译情况下&#xff0c;进行热加载。 发行时&…

【教程】Unity 联动 MSMQ 消息通讯

开发平台&#xff1a;Unity 2021.3.7 通讯平台&#xff1a;Windows 10 依赖DLL&#xff1a;System.Messaging.dll   一、本文目标 了解与操作 Windows 平台上建立 Unity 与 MSMQ 通讯机制。实现基础的通讯功能。   二、准备&#xff1a;启用 MSMQ 服务项 注意&#xff1a;默…

操作符——区别C++前置++和后置++

这里写目录标题 1.问题引出Q:重载或者--的时候如何区分前置和后置&#xff1f; 2.C规范3.前后置实现4.为什么i;可以 i&#xff1b;不行 1.问题引出 Q:重载或者–的时候如何区分前置和后置&#xff1f; 以前C对前置和后置没有很好的办法可以区分&#xff0c;为了解决这个问题&…

面试之SpringAOP的理解:

AOP(面向切面编程)指的是那些业务本身无关&#xff0c;但是被业务模块所共同调用的业务逻辑或责任&#xff08;日志管理&#xff0c;权限管理等&#xff09;封装起来&#xff0c;便于减少系统的重复代码&#xff0c;降低系统见的耦合性&#xff0c;有利于未来系统的扩展性。 S…

IOS开发工程师的发展前景怎么样

本文目录一览 1&#xff0c;iOS开发工程师就业前景怎么样2&#xff0c;北大青鸟java培训IOS开发前景怎么样3&#xff0c;iOS开发工程师就业前景怎么样4&#xff0c;作为一个iOS开发程序员我的未来何去何从5&#xff0c;IOS开发工程师的发展前景怎么样6&#xff0c;ios开发工程…

Ubuntu 20.04 L2TP VPN 自动重连脚本,cron定时任务设置

1、连接VNP脚本 reconnect_l2tp_vpn.sh #!/bin/sh ppp0_flagifconfig | grep ppp0 echo $ppp0_flag if [ -z "$ppp0_flag" ];thenecho "connet to vpn ..."# connet vpn# echo PASSWORD &#xff5c; sudo -S 这样可以不用手动输入密码!echo abc123| su…

我爱学QT-QT信号和槽

1.给控件改名字 为了分析代码方便&#xff0c;我们要给控件改名字。要通俗易懂。 2.信号和槽 信号&#xff1a;信号就是指控件发出的特定的信号。 比如按钮的信号 槽&#xff1a;槽就是槽函数的意思&#xff0c;我们可以把槽函数绑定在某一个控件的信号上。 3.怎么关联信号…

IntelliJ IDEA中生成jar包并运行

1. 过程 依次选择菜单&#xff1a;File->Project Structure…&#xff0c;打开“Project Structure”界面。 在打开界面的左侧列表中选择&#xff1a;Artifacts&#xff0c;点击右侧出现的号。 在出现的菜单中依次选择&#xff1a;JAR->From modules with dependencies…

家政行业丨制作便捷高效的家政小程序

随着现代生活节奏的加快和家庭需求的多样化&#xff0c;越来越多的人开始寻找一种更方便、更高效的方式来获取家政服务。而家政小程序的兴起为这一需求提供了理想的解决方案。本文将简要介绍家政小程序是什么&#xff0c;探讨家政小程序的好处&#xff0c;并提供一些制作搭建家…

element上传文件对格式限制的处理

需求&#xff1a;上传的文件格式必须是pdf格式&#xff0c;方便查看 规定多种格式用逗号隔开 使用这个属性可以规定上传文件格式&#xff0c;但是有bug 可以手动改变显示的文件类型&#xff0c;还是可以传其他文件类型 所以需要在上传的时候限制上传的文件格式 上传组件 <…

X2000 Linux 调试VL53L4CD

由于VL53L4CD具有更高的精度&#xff0c;更低的功耗&#xff0c;所以尝试将VL53L4CD移植到X2000上进行测试。 一、下载驱动 en.VL53L4CD_LinuxDriver 二、SDK中加入驱动 1、加入源码 在\module_driver\devices下创建VL53L4CD文件夹&#xff0c;再将\en.VL53L4CD_LinuxDriver…