StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况. 下面通过一个简单的例子来说明使用协程的好处: void OnGUI() { GUI.Label(new Rect(0, 0, 200, 50), "测试1:" + result); if (GU…
StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况. 下面通过一个简单的例子来说明使用协程的好处: void OnGUI() { GUI.Label(new Rect(0, 0, 200, 50), "测试1:" + result); if (GU…
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁.如何利用已有对象来服务(不止一个不同的任务)就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因.比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同…
1.简单的例子 #include "stdafx.h" #include <iostream> #include <thread> void function_1() { ; i < ; i++) { std::cout << "from function 1" << std::endl; } } int main() { std::thread t(function_1); ; i < ; i++) {…
Unity用Excel.dll简单读取Excel内容 需要Excel.dll 需要如下三个命名空间 using System.IO; using Excel; using System.Data; 1.新建Excel文件,并添加到Unity工程 这里新建的文件名为test.xml 2.创建一个C#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; us…
1.简单线程实例 以及委托(同步委托.异步委托) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Runtime.Remoting.Messaging; namespace ThreadTest { class Program { static void Main(string[] args) { C…
一.简介   今天来学习一下后处理中比较常用的一种效果,屏幕模糊效果.模糊效果,在图像处理中经常用到,Photoshop中也有类似的滤镜.我们在游戏中也会经常用到.因为屏幕模糊效果是一些高级后处理效果的基础,比如景深等效果都需要用屏幕模糊效果来实现,所以我们首先看一下屏幕模糊效果,然后通过屏幕模糊,进一步学习景深效果与运动模糊效果的实现. 所谓模糊,也就是不清楚,清晰的图片,各个像素之间会有明显的过渡,而如果各个像素之间的差距不是很大,那么图像就会模糊了,极端一点的情况,当一张图片所有的像素之间…
大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的.在传统的多线程服务器模型中是这样实现的:一旦有个服务请求到达,就创建一个新的服务线程,由该线程执行任务,任务执行完毕之后,线程就退出.这就是"即时创建,即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服务器就将处于一个不停的创建线程和销毁线程的状态.这笔开销是不可忽略的,尤其是线程执…
基于C++11的100行实现简单线程池 1 线程池原理 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中. 线程池组成部分: 线程池管理器:用于创建并管理线程池 工作线程: 线程池中实际执行的线程 任务接口: 尽管线程池大多数情况下是用来支持网络服务器,但是我们将线程执行的任务抽象出来,形成任务接口,从而是的线程池与具体的任务无关. 任务队列:线程池的概念具体到实…
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过…
简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [csharp] view plain copyThread connectThread;//当前服务端监听子线程 public string address;//当前地址 public int port;//当前本地端口 TcpClient romoteClient;//远程客户端 // Use t…
这是一个简单的C++11实现的线程池,代码很简单. 原理就是管理一个任务队列和一个工作线程队列. 工作线程不断的从任务队列取任务,然后执行.如果没有任务就等待新任务的到来.添加新任务的时候先添加到任务队列,然后通知任意(条件变量notify_one)一个线程有新的任务来了. 源代码来自https://github.com/progschj/ThreadPool #ifndef THREAD_POOL_H #define THREAD_POOL_H #include <vector> #incl…
转自:http://blog.csdn.net/wanzhuan2010/article/details/7763280 Unity是Unity是微软patterns& practices组用C#实现的轻量级,可扩展的依赖注入容器,它为方便开发者建立松散耦合的应用程序, 有以下优点: 1.简化了对象的创建,特别是针对分层对象结构和依赖关系: 2.需求的抽象,允许开发人员在运行时或配置文件中指定依赖关系,简化横切关注点的管理: 3.推迟为容器配置组件的时机,增加了灵活性: 4.服务定位能力,这使客…
有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带来的开销,我们可以使用线程池.下面是一个C语言实现的简单的线程池. 头文件: 1: #ifndef THREAD_POOL_H__ 2: #define THREAD_POOL_H__ 3:  4: #include <pthread.h> 5:  6: /* 要执行的任务链表 */ 7: typedef struct tpool_work { 8: void* (*routine)(void*); /* 任务函数…
前言 任何一种设计方式的引入都会带来额外的开支,是否使用,取决于能带来多大的好处和能带来多大的坏处,好处与坏处包括程序的性能.代码的可读性.代码的可维护性.程序的开发效率等. 线程池适用场合:任务比较多,需要拉起大量线程来处理:任务的处理时间相对比较短,按照线程的周期T1(创建阶段).T2(执行阶段).T3(销毁阶段)来算,执行阶段仅占用较少时间. 简单的线程池通常有以下功能:预创建一定数量的线程:管理线程任务,当工作线程没有事情可做时休眠自己:销毁线程池. 复杂一些的线程池有额外的调节功能:管…
先上结论:FixedUpdate 与 Update 在同一个线程上. 实验过程: 1.打印 FixedUpdate 和 Update 的线程编号 void FixedUpdate () { Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId); } void Update () { Debug.Log ("Update => " + Thread.CurrentThrea…
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图: 我们为什么要使用线程池呢? 简单来说就是线程本身存在开销,我们利用多线程来进行任务处理,单线程也不能滥用,无止禁的开新线程会给系统产生大量…
python中对线程的支持的确不够,不过据说python有足够完备的异步网络框架模块,希望日后能学习到,这里就简单的对python中的线程做个总结 threading库可用来在单独的线程中执行任意的python可调用对象.尽管此模块对线程相关操作的支持不够,但是我们还是能够用简单的线程来处理I/O操作,以减低程序响应时间. from threading import Thread import time def countdown(n): while n > 0: print('T-minus:…
好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本<Unity Shader入门精要>,<Unity 3D ShaderLab 开发实战详解>,开一个系列记录一下学习的心得笔记.原理就不多讲了,一篇一个实际Shader样例就好了. 貌似一开始关于shader的讲解都是diffuse,不过,我赶脚后处理貌似更简单,所以第一篇来一发简单后处理,屏幕的简单颜色校正--调整亮度,饱和度,对比度. 一.概念介绍   我们在做游戏的时候…
Unity除了一些基本的数据类型,几乎所有的API都不能在非unity线程中调用,如果项目中有一段很耗时操作,unity可能会出现“假死”.如果这段操作是和unity无关的,我们可以把这个耗时的操作放到子线程中去运行,防止unity假死提高性能,如下面这个伪代码 Function { //这个函数会进行大量文件读写操作 LoadLocalFile(); //这个函数是unity函数 UnityFunction(); } 必须保证LoadLocalFile() 不“假死”.怎么做呢?只要把Func…
在上一篇介绍了多线程和Unity交互方式,但是由于我的项目是一个unity编辑器插件项目,很显然上一篇的代码需要加以修改,在编辑器下实现Loom. 1,Editor下的没有Update这个生命周期函数,但是Ediitor提供了EditorApplication.update这个事件,自己用这个事件订阅update方法即可 2,Editor下的没有Awake OnDestory这些生命周期函数,需要自己编写方法让外部去创建.销毁Loom 3,  我的项目需要保证子线程逻辑不假死的同时又要保证同步,…
本节主要举一个简单的线程间通信的例子,利用线程安全的数据结构queue.Queue保存线程间通信的内容, import queue from threading import Thread from random import randint class WriteThread(Thread): def __init__(self,sid,queue): Thread.__init__(self) self.sid = sid self.queue = queue def run(self):…
状态机模式在unity中作用是非常大的,可以实现角色的移动和场景的跳转,包括一些动画的播放,在很多unity框架中也是很常见的,发散思维广阔,下面是简单的状态机的实现,有注释 using System.Collections;using System.Collections.Generic;using UnityEngine;public enum StateType{ Idle, Die, Move,} public abstract class StateObject{ protected…
threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法: threading.currentThread(): 返回当前的线程变量. threading.enumerate(): 返回一个包含正在运行的线程的list.正在运行指线程启动后.结束前,不包括启动前和终止后的线程. threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果. 除了使用方法外,线程模块同样提供了Thread…
我们知道Java语言对于多线程的支持十分丰富,JDK本身提供了很多性能优良的库,包括ThreadPoolExecutor和ScheduleThreadPoolExecutor等.C++11中的STL也提供了std:thread(然而我还没有看,这里先占个坑)还有很多第三方库的实现.这里我重复"造轮子"的目的还是为了深入理解C++和Linux线程基础概念,主要以学习的目的. 首先,为什么要使用线程池.因为线程的创建.和清理都是需要耗费系统资源的.我们知道Linux中线程实际上是由轻量级进…
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图: 我们为什么要使用线程池呢? 简单来说就是线程本身存在开销,我们利用多线程来进行任务处理,单线程也不能滥用,无止禁的开新线程会给系统产生大量…
这两天刚好看完linux&c这本书的进程线程部分,学长建议可以用c语言实现一个简单的线程池,也是对线程知识的一个回顾与应用.线程的优点有好多,它是"轻量级的进程",所需资源少,多线程共享数据空间,线程之间切换速度更快,可以减少服务器的闲置时间等. 那么我们要在往高层次讲它也有一些缺点,比如一个多线程的程序在创建和销毁线程的时候是比较费资源的,举一个例子,我们要是自己是一个普通饭店老板,当顾客来了我们再做饭,那么势必比较慢,这当然会使得顾客感受不好:但是我们要是KFC工作人员,来…
注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建一个2D程序的,没看过或者忘记的同学可以看这里回忆一下^_^ 如果说上次的2D版就是个带了个HoloLens面具的UWP程序,那我们这次要做的呢可是正宗的3D程序哦. 先来看看我们要做些什么准备. 1. Visual Studio 2015 Update 3 2. Windows 10 (10.0.105…
1.线程需要用到<widnows.h> 2.利用句柄创建并执行线程: HANDLE hThread = CreateThread(NULL, 0, Fun, &tp, 0, NULL); CloseHandle(hThread); 注意:线程的函数必须是以DWORD WINAPI functionName(LPVOID lpParamter)的形式声明 3.完整代码如下: #include <iostream> #include <windows.h> usin…
1.定义线程类及内部事件 using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Windows.Forms; namespace ThreadSample { public delegate void ThreadEventHandler(object sender, EventArgs e); public class myThread {…