1.在C#中使用线程池需要以下这个类库using System.Threading

2.开单个线程(unity程序停止前 线程一定要关闭)

    private Thread tempThread;
void Start () {
tempThread = new Thread(MyThread);//将方法注册到线程句柄当中,注意保留这个句柄,最后需要关闭线程,要不然会造成unity停止运行线程不停止。
tempThread.Start();//开启线程。
}
//这是线程方法
private void MyThread()
{
Debug.Log("开了线程");
}

关闭线程(Thread.Abort();)

3.线程池的使用

线程池相对于线程而言更加方便,在线程池中的线程是由系统进行统一管理,我们在使用的过程中不需要自己去对线程进行开关操作,这些系统都会给我们做了。而且线程池还有一个好处,就是可以传参!

    private int m_iParam;//随便一个类型的参数
void Start () {
ThreadPool.QueueUserWorkItem(new WaitCallback(MyThread), m_iParam);//将方法添加进线程池,并传入参数
}
private void MyThread(object param)
{
Debug.Log("开了线程");
}

也可以封装成方法

//线程池上的队列
public static void QueueOnThreadPool(WaitCallback callBack, object state = null)
{
ThreadPool.QueueUserWorkItem(callBack, state);
}

c#脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
using System; public class XianCheng : MonoBehaviour
{
public static XianCheng Current;
static Thread mainthread; //主线程
private List<Action> actions = new List<Action>(); //
public int[]tssd=new int [30];
public bool bol = false; public static bool IsMainThread()
{
return Thread.CurrentThread == mainthread;
}
private void Awake()
{
Current = this;
mainthread = Thread.CurrentThread;
bol = true;
}
private void OnDestroy()
{
mainthread.Abort();
bol = false;
}
void Start()
{
QueueOnThreadPool((Func_0), 0);
}

void Update()
{
var currentActions = new List<Action>();
lock (actions)
{
currentActions.AddRange(actions);
foreach (var item in currentActions)
actions.Remove(item); } }
//主线程上的队列
public static void QueueOnMainThread(Action action)
{
if (IsMainThread())
{
action();
return;
} lock (Current.actions)
{
Current.actions.Add(action);
}
}
//线程池上的队列
public static void QueueOnThreadPool(WaitCallback callBack, object state = null)
{
ThreadPool.QueueUserWorkItem(callBack, state);
} }
 void Func_0(object parm)
{
try
{
while (bol)
{
tssd[0] += 1;
Thread.Sleep(100);
}
}
catch (Exception e)
{
Debug.Log(e.Message); }
}

Unity多线程使用(线程池)的更多相关文章

  1. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  2. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  3. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

  4. 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

    [源码下载] 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 作者:webabcd 介绍重新想象 Wi ...

  5. ExecutorService 建立一个多线程的线程池的步骤

    ExecutorService 建立一个多线程的线程池的步骤: 线程池的作用: 线程池功能是限制在系统中运行的线程数. 依据系统的环境情况,能够自己主动或手动设置线程数量.达到执行的最佳效果:少了浪费 ...

  6. C#多线程和线程池问题

    static void Main(string[] args) { Thread threadA = new Thread(ThreadMethod); //执行的必须是无返回值的方法 threadA ...

  7. Qt多线程-QThreadPool线程池与QRunnable

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable     本文地址:https:/ ...

  8. Java基础教程:多线程基础——线程池

    Java基础教程:多线程基础——线程池 线程池 在正常负载的情况瞎,通过为每一个请求创建一个新的线程来提供服务,从而实现更高的响应性. new Thread(runnable).start() 在生产 ...

  9. Qt中的多线程与线程池浅析+实例

    1. Qt中的多线程与线程池 今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下 2. 多线程 2.1 线程类 QThread Qt 中提供了一个线程类,通过这个类就可以创建子线程了,Qt 中一 ...

  10. Python多线程、线程池及实际运用

    我们在写python爬虫的过程中,对于大量数据的抓取总是希望能获得更高的速度和效率,但由于网络请求的延迟.IO的限制,单线程的运行总是不能让人满意.因此有了多线程.异步协程等技术. 下面介绍一下pyt ...

随机推荐

  1. Jemeter 压测 Elasticsearch

    Jemeter 版本 apache-jmeter-5.5 Elasticsearch 版本 7.17.6 自行官网下载 Elasticsearch压测报告 Elasticsearch 服务器当前情况: ...

  2. XMACL

    访问控制策略描述语言 模型 组合算法(解决策略冲突):拒绝优先算法.许可优先算法.首先应用算法.唯一应用算法 目标(资源.主体.动作.环境)+效用(Permit/Deny)+条件 (结果是True/F ...

  3. 前端之Vue day 05 父子通信、ref、动态组件、插槽、计算监听属性

    一.父传子 因为组件间数据不共享,所以我们要想办法打通父子之间的数据联系 自定义属性: 在父级中,给在使用的子组件标签加一个自定义的属性,因为要用到data,所以要写成 :自定义属性名='' #注意, ...

  4. ORA-01653:unable to extend table xxxxx by 8192 in tablespace xxxxx

    原因:表空间满 解决:扩展表空间 报错截图: 参考摘录:https://blog.csdn.net/qq_35257875/article/details/90295272

  5. 调度器45—wake_affine

    基于 Linux-5.10 一.wake_affine 简介 1. 背景 在进程唤醒选核路径中, wake_affine 倾向于将被唤醒进程(wakee)尽可能安排在 waker所在 CPU 上, 这 ...

  6. selenium最常用的基本方法

    1.打开,关闭浏览器 打开chrome浏览器:webdriver.Chorme() 打开Firefox浏览器:webdriver.Firefox() 关闭当前浏览器窗口:driver.close() ...

  7. EMQX 在 Kubernetes 中如何进行优雅升级

    背景 为了降低 EMQX 在 Kubernetes 上的部署.运维成本,我们将一些日常运维能力进行总结.抽象并整合到代码中,以 EMQX Kubernetes Operator 的方式帮助用户实现 E ...

  8. mysql索引相关知识

    一.什么情况下会使索引失效? 二.sql优化您们是怎么做的? 1.首先开启数据库慢查询日志,定位到查询效率比较低的sql , 找出对应的sql语句并进行分析 1.表设计是否规范,是否符合三范式的标准( ...

  9. SqlServer的主键和外键

    SqlServer在创建表时要有 完整性约束(主键)和参照性约束(外键) 1.在建表时创建主键 第一种方法: 第二种方法: 联合主键,即2个主键,sid和cid 2.如果表已经存在,需要创建主键 外键

  10. JS字符串拼接的方法及性能比较

    一.+和+=str += "one" + "two";这段代码在运行过程中,会经历四个步骤:1.在内存中创建一个临时字符串2.将连接后的字符串"one ...