unity跨线程操作的问题
来源:互联网 发布:mysql 5.6.25安装 编辑:程序博客网 时间:2024/06/08 03:34
* Anthor:penguin_ku(十月)
* DateTime:2015/5/3 22:35:41
* FileName:MainTaskProcessor
* MachineName: win8.1-04020905
* Version:V1.0.0.0
*
* Function:
* 1、
* 2、
* 3、
* 4、
*
* Tip:
* 1、
* 2、
* 3、
* 4、
*
* Modify:
* DateTime:
* Remark:
*/
using Assets.Core.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
/// <summary>
/// 主线程任务处理器
/// </summary>
public class MainTaskProcessor : MonoBehaviour
{
#region 私有变量
private static System.Object m_oneLoopQueueLock = new object();
private static List<TaskUnit> m_oneLoopQueues = new List<TaskUnit>();
#endregion
#region 公开方法
/// <summary>
/// 追加一次性任务
/// </summary>
/// <param name="p_action"></param>
public static void AppendOneAction(TaskUnit p_action)
{
lock (m_oneLoopQueueLock)
{
m_oneLoopQueues.Add(p_action);
}
}
#endregion
#region 生命周期
private void Start()
{
gameObject.name = "MainTaskProcessor";
}
private void Update()
{
for (int i = 0; i < m_oneLoopQueues.Count; i++)
{
var item = m_oneLoopQueues[i];
item.CurrWait += Time.deltaTime;
if (item.CurrWait >= item.Interval)
{
item.Action();
item.CurrWait = 0;
item.CurrLoopTimes++;
if (item.LoopTimes != -1 && item.CurrLoopTimes >= item.LoopTimes)
{
m_oneLoopQueues.RemoveAt(i);
i--;
}
}
}
}
#endregion
}
/* Copyright (c) 2015 3shine.com
* Anthor:penguin_ku(十月)
* DateTime:2015/8/11 10:04:24
* FileName:ActionUnit
* Version:V1.0.0.0
*
* Function:
* 1、
* 2、
* 3、
* 4、
*
* Tip:
* 1、
* 2、
* 3、
* 4、
*
* Modify:
* DateTime:
* Remark:
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// <summary>
/// 执行单元
/// </summary>
public class TaskUnit
{
#region 公开属性
/// <summary>
/// 设置或获取需要执行的操作
/// </summary>
public Action Action { set; get; }
/// <summary>
/// 设置或获取等待间隔
/// </summary>
public float Interval { set; get; }
/// <summary>
/// 设置或获取需要循环执行次数
/// </summary>
public int LoopTimes { set; get; }
/// <summary>
/// 设置或获取当前等待时间
/// </summary>
public float CurrWait { set; get; }
/// <summary>
/// 设置或获取当前循环次数
/// </summary>
public int CurrLoopTimes { set; get; }
#endregion
#region 构造函数
/// <summary>
/// 构造函数
/// </summary>
/// <param name="p_action"></param>
/// <param name="p_interval"></param>
/// <param name="p_loopTimes"></param>
public TaskUnit(Action p_action, float p_interval = 0, int p_loopTimes = 1)
{
Action = p_action;
Interval = p_interval;
LoopTimes = p_loopTimes;
CurrWait = 0;
CurrLoopTimes = 0;
}
#endregion
}
使用:
MainTaskProcessor.AppendOneAction(
new
TaskUnit(() =>
{
/*你的代码*/
}));
from: http://www.unitymanual.com/thread-41935-1-1.html
- unity跨线程操作的问题
- c#跨线程操作问题
- android中子线程操作UI的问题
- 非UI线程的跨线程操作
- WebBrowser 跨线程操作中的一些问题
- Unity界面的操作
- Unity的快捷操作
- 操作线程问题
- WinForm中线程问题:线程间操作无效: 从不是创建控件“...”的线程访问它
- c#线程问题:线程间操作无效:从不是创建控件 的线程访问它
- WinForm中线程问题:线程间操作无效: 从不是创建控件“...”的线程访问它
- 有关cocos2dx游戏中复制与粘贴的问题(跨线程的操作)
- Unity的旋转问题
- unity的破解问题
- Unity 遇到的问题
- unity遇到的问题
- 【C#】利用委托解决跨线程操作控件产生的问题
- 多线程2:线程操作共享数据所引发的问题
- Android之横竖屏切换内容丢失问题解决方法
- 俏皮的sed
- oracle序列
- 已知中序和后序,求前序
- 野指针产生的原因和避免方法
- unity跨线程操作的问题
- 数据结构复习之单链表:基本操作及逆序打印、逆转、合并等
- jenkins 系统设置
- C语言 产生 1- 100万随机数,如果重复的话,能马上知道.
- 直接插入排序(C++实现)
- MD5加密算法
- 编程小技巧之封装
- 大白话系列之C#委托与事件讲解(序言)
- Triangle LOVE 杭电HDU4324 【拓扑排序】