Unity3d多线程

http://blog.csdn.net/dingkun520wy/article/details/49181645

(一)多线程的创建

Thread t = new Thread(new ThreadStart(Go));

Thread t1 = new Thread(Go);

两种创建方式没有区别;

(二)多线程的状态控制和优先级

多线程有4种状态:Start()开始;Abort()终止;Join()阻塞;Sleep()休眠;

有5种优先级:从高到底依次为:Highest,AboveNormal ,Normal ,BelowNormal ,Lowest;

线程的默认优先级为Normal;

多线程实例

[csharp] view plain copy

  1. /*
  2. *
  3. * 游戏多线程
  4. * */
  5. using UnityEngine;
  6. using System.Threading;
  7. public class BaseThread{
  8. private static BaseThread instance;
  9. object obj = new object();
  10. int num = 0;
  11. private BaseThread()
  12. {
  13. /*测试线程优先级
  14. /*/
  15. Thread th1 = new Thread(Th_test1);              //创建一个线程
  16. Thread th2 = new Thread(Th_test2);
  17. Thread th3 = new Thread(Th_test3);
  18. th1.Start();
  19. th2.Start();
  20. th3.Start();
  21. //学习优先级
  22. th1.Priority = System.Threading.ThreadPriority.Highest;         //优先级最高
  23. th2.Priority = System.Threading.ThreadPriority.Normal;
  24. th3.Priority = System.Threading.ThreadPriority.Lowest;
  25. //**/
  26. ///*测试线程锁
  27. /*/
  28. Thread th1 = new Thread(new ThreadStart(Th_lockTest));
  29. th1.Name = "test1";
  30. th1.Start();
  31. Thread th2 = new Thread(new ThreadStart(Th_lockTest));
  32. th2.Name = "test2";
  33. th2.Start();
  34. //*/
  35. }
  36. public static BaseThread GetInstance()
  37. {
  38. if (instance == null)
  39. {
  40. instance = new BaseThread();
  41. }
  42. return instance;
  43. }
  44. //测试多线程锁
  45. public void Th_lockTest()
  46. {
  47. Debug.Log("测试多线程");
  48. while (true)
  49. {
  50. lock (obj)
  51. {                                //线程“锁”
  52. num++;
  53. Debug.Log(Thread.CurrentThread.Name + "测试多线程" + num);
  54. }
  55. Thread.Sleep(100);
  56. if (num > 300)
  57. {
  58. Thread.CurrentThread.Abort();
  59. }
  60. }
  61. }
  62. //测试多线程优先级
  63. public void Th_test1()
  64. {
  65. for (int i = 0; i < 500; i++)
  66. {
  67. Debug.Log("测试多线程1执行的次数:" + i);
  68. if(i >200)
  69. {
  70. Thread.CurrentThread.Abort();
  71. }
  72. }
  73. }
  74. public void Th_test2()
  75. {
  76. for (int i = 0; i < 500; i++)
  77. {
  78. Debug.Log("测试多线程2执行的次数:" + i);
  79. if (i > 300)
  80. {
  81. Thread.CurrentThread.Abort();
  82. }
  83. }
  84. }
  85. public void Th_test3()
  86. {
  87. for (int i = 0; i < 500; i++)
  88. {
  89. Debug.Log("测试多线程3执行的次数:" + i);
  90. if (i > 400)
  91. {
  92. Thread.CurrentThread.Abort();
  93. }
  94. }
  95. }
  96. }

注意:

1,当多个线程同时访问同一数据时要加线程锁lock。

[csharp] view plain copy

    1. Object n=new Object();
    2. long shu = 0;
    3. // Use this for initialization
    4. void Start () {
    5. }
    6. // Update is called once per frame
    7. void Update ()
    8. {
    9. lock (n)
    10. {
    11. xian = 1;
    12. }
    13. }
时间: 2024-10-11 12:55:37

Unity3d多线程的相关文章

[原]unity3d之http多线程异步资源下载

郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来填补一下自己的空白,同时分享给大家.说明:本人只在pc和Android下测试好使,其他平台未知! 直接贴代码,都是C# http的API,不懂得自己百科. using UnityEngine; using System.Collections; using System; using System.

Unity3D游戏开发之多线程及使用多线程

Unity3D游戏开发之多线程及使用多线程 Unity3D中的多线程.线程是一个相当复杂的话题,但如果掌握了它,就可以从容的使用多个硬件处理器或处理很难划分管理数据块. 如在场景中用A*算法进行大量的数据计算,变形网格中操作大量的顶点,持续的要运行上传数据到服务器,二维码识别等图像处理,如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine. 线程是在程序中与其他线程同时运行的进行.在多处理器的计算机上可以做到多个线程的真正的同步,更多的线程取决于有多

Unity3D中的多线程及使用多线程

Unity3D中的多线程.线程是一个相当复杂的话题,但如果掌握了它,就可以从容的使用多个硬件处理器或处理很难划分管理数据块. 如在场景中用A*算法进行大量的数据计算,变形网格中操作大量的顶点,持续的要运行上传数据到服务器,二维码识别等图像处理,如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine. 线程是在程序中与其他线程同时运行的进行.在多处理器的计算机上可以做到多个线程的真正的同步,更多的线程取决于有多个处理核心. Unity3D编程时,总有个主

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

我不是九爷 带了解 Unity3D与VR虚拟现实

对于大多数人来说,可能不知道Unity3D是什么,但是却知道VR虚拟现实是什么,更不会把VR虚拟现实和Unity3D联系在一起,外行的人根本不知道这两者之间有什么关系.那么,今天来给你讲解一下Unity3D与VR虚拟现实之间的区别和联系分别是什么? 什么是Unity3D?Unity3D是一软专业3D游戏引攀,其具备跨平台发布.离效能优化.高性价比,AAA级游戏画面演染效果等特点.目前Unity3D应用范围广泛,从手机游戏到联网的大型游戏,从严肃游戏到电子商务,再到VR虚拟现实均可完美呈现. 什么

unity 多线程

对于客户端来说,好的用户体验,需要保持一个快速响应的用户界面.于是便要求:网络请求.io操作等 开销比较大的操作必须在后台线程进行,从而避免主线程的ui卡顿.(注:协程也是主线程的一部分,进行大量的io操作也会造成UI卡顿) 在 WPF 中,DispatcherObject 只能通过与它关联的 Dispatcher 进行访问. 例如,后台线程不能更新与 UI 线程中的 Dispatcher 关联的 Button 内容. 在unity4.X中,unity的api 是线程不安全的,只允许主线程进行访

多线程编程_1

协程和线程差不多,线程的调度是由操作系统完成的,协程把这项任务交给了程序员自己实现,当然也就可以提高灵活性,另外协程的开销比线程要小,在程序里可以开更多的协程. 在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以开启一个线程.区别在于使用字符串作为参数可以开启线程并在线程结束前终止线程,相反使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAl

Unity3d Load AssetBundle(不同平台)

~~~~~题外~~~~~ 公司工作机不能上外网,疏于整理自己所学的知识,导致很多知识点了解过多次,仍然遗忘.慢慢开始下班后在家整理吧~~ 正题 unity3d有四种加载机制: //服务器地址样例 string sUrl = "http://192.168.X.X/hss"+"/test.assetbundle"; //本地地址样例 /***** * 对于不同平台 Application.persistentDataPath 路径都有读写权限(需要多线程下载的兄妹们的

Unity3d报告奇怪的错误CompareBaseObjectsInternal can only be called from the main thread.

其中使用了该项目.NET的Async Socket代码.后来不知道什么时候这个奇怪的错误的出现: CompareBaseObjectsInternal can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the con