C\#유 니 티 게임 개발 에서 다 중 스 레 드 프로 그래 밍 을 하 는 방법
먼저 C\#에서 다 중 스 레 드 를 사용 하 는 라 이브 러 리 를 도입 합 니 다.
using System.Threading;
스 레 드 인 스 턴 스 를 만 드 는 네 가지 방식1.스 레 드 실행 무 참 방법
구조 문법
// Thread 。
// < param name="start"> .</ param>
public Thread(ThreadStart start)
start형식:System.Threading.ThreadStart
이 스 레 드 를 실행 할 때 호출 할 방법 을 표시 하 는 ThreadStart 의뢰 입 니 다.
void Start()
{
//
Thread thr = new Thread(Func_NoArguments);
//
thr.Start();
}
// Function Of No Arguments.
void Func_NoArguments()
{
Debug.Log("Run Func_NoArguments");
}
2.스 레 드 실행 에 참여 하 는 방법 이 있 습 니 다.구조 문법
// Thread 。
// < param name="start"> .< /param>
public Thread(ParameterizedThreadStart start)
start형식:System.Threading.ParameterizedThreadStart
이 스 레 드 가 실 행 될 때 호출 할 방법 을 표시 하 는 의뢰
메모:매개 변 수 는 하나만 있 고 object 형식 이 어야 합 니 다.
실례
void Start()
{
//
Thread thr = new Thread(Func_Arguments);
// ,
thr.Start("Lanou");
}
// Function Of Have Arguments.
void Func_Arguments(object data)
{
Debug.Log("Run Func_Arguments, Data = " + data);
}
3.스 레 드 실행 무 참 방법,스 레 드 사용 할 최대 스 택 크기 제한구조 문법
// Thread 。
// < param name="start"> .< /param>
// < param name="maxStackSize"> .< /param>
public Thread(ThreadStart start,int maxStackSize)
start형식:System.Threading.ThreadStart
이 스 레 드 를 실행 할 때 호출 할 방법 을 표시 하 는 ThreadStart 의뢰 입 니 다.
maxStackSize
형식:System.Int 32
스 레 드 에 사용 할 최대 스 택 크기(바이트 단위);0 이면 실행 가능 한 파일 헤더 에 지정 한 기본 최대 스 택 크기 를 사용 합 니 다.
중요 사항:일부 신뢰 받 는 코드 에 대해 max StackSize 가 기본 스 택 크기 보다 크 면 무시 합 니 다.이상 을 일 으 키 지 않다.
void Start()
{
// , 256KB
Thread thr = new Thread(Func_NoArguments,262144);
//
thr.Start();
}
// Function Of No Arguments.
void Func_NoArguments()
{
Debug.Log("Run Func_NoArguments");
}
4.스 레 드 실행 에 참고 방법 이 있 고 스 레 드 가 사용 할 최대 스 택 크기 를 제한 합 니 다.구조 문법
// Thread 。
// < param name="start"> .< /param>
// < param name="maxStackSize"> .< /param>
public Thread(ParameterizedThreadStart start,int maxStackSize)
start형식:System.Threading.ParameterizedThreadStart
이 스 레 드 가 실 행 될 때 호출 할 방법 을 표시 하 는 의뢰
메모:매개 변 수 는 하나만 있 고 object 형식 이 어야 합 니 다.
maxStackSize
형식:System.Int 32
스 레 드 에 사용 할 최대 스 택 크기(바이트 단위);0 이면 실행 가능 한 파일 헤더 에 지정 한 기본 최대 스 택 크기 를 사용 합 니 다.
중요 사항:일부 신뢰 받 는 코드 에 대해 max StackSize 가 기본 스 택 크기 보다 크 면 무시 합 니 다.이상 을 일 으 키 지 않다.
실례
void Start()
{
// , 256KB
Thread thr = new Thread(Func_Arguments,262144);
// ,
thr.Start("Lanou");
}
// Function Of Have Arguments.
void Func_Arguments(object data)
{
Debug.Log("Run Func_Arguments, Data = " + data);
}
시작 스 레 드(위 에서 사용)무 참 시작
void Start()
{
//
Thread thr = new Thread(Func_NoArguments);
//
thr.Start();
}
// Function Of No Arguments.
void Func_NoArguments()
{
Debug.Log("Run Func_NoArguments");
}
유 참 시동
void Start()
{
//
Thread thr = new Thread(Func_Arguments);
// ,
thr.Start("Lanou");
}
// Function Of Have Arguments.
void Func_Arguments(object data)
{
Debug.Log("Run Func_Arguments, Data = " + data);
}
상용 방법1.Public static void Sleep(int milliseconds Timeout)은 현재 스 레 드 를 지정 한 밀리초 단위 로 걸 어 놓 습 니 다.
(1)millisecondsTimeout
형식:System.Int 32
스 레 드 의 밀리초 수 를 걸다.milliseconds Timeout 매개 변수 값 이 0 이면 이 스 레 드 는 시간 영화 의 나머지 부분 을 실행 할 준비 가 되 어 있 고 같은 우선 순위 가 있 는 스 레 드 에 양보 합 니 다.실행 할 준비 가 되 어 있 고 같은 우선 순위 가 있 는 다른 스 레 드 가 없 으 면 현재 스 레 드 의 실행 을 끊 지 않 습 니 다.
(2)public void Resume()
걸 려 있 는 스 레 드 를 계속 합 니 다.(타임 슬립
(3)public void Abort()
이 방법 을 호출 하 는 스 레 드 에서 ThreadAbortException 을 일 으 켜 이 스 레 드 를 종료 하 는 과정 을 시작 합 니 다.이 방법 을 사용 하면 보통 스 레 드 를 종료 합 니 다.
(4)public void Join()
스 레 드 가 종 료 될 때 까지 호출 스 레 드 를 막 고 표준 COM 과 SendMessage 전송 을 계속 수행 합 니 다.
(5)public enum ThreadPriority
Thread 의 스케줄 우선 순 위 를 지정 합 니 다.
스 레 드 탱크 를 통 해 스 레 드 를 실행 합 니 다.
2.ThreadPool.QueueUserWorkItem 방법(WaitCallback)
public static bool QueueUserWorkItem(WaitCallback callBack)
callBack
형식:System.Threading.WaitCallback
실행 할 방법 을 표시 하 는 WaitCallback
반환 값
유형:System.Beaulean
이 방법 이 줄 을 서 는 데 성공 하면 true 입 니 다.이 작업 항목 을 줄 을 서지 못 하면 NotSupported Exception 이 발생 합 니 다.
Unity 다 중 스 레 드 사용 주의
변 수 는 모두 공 유 됩 니 다.(같은 메모리 주 소 를 가리 킬 수 있 습 니 다)
UnityEngine 의 API 는 스 레 드 에서 실 행 될 수 없습니다.
UnityEngine 이 정의 하 는 기본 구조(int,float,Struct 가 정의 하 는 데이터 형식)는 Vector 3(Struct)와 같은 스 레 드 에서 계산 할 수 있 지만 Texture2d(class,루트 부 류 는 Object)는 안 됩 니 다.
UnityEngine 이 정의 하 는 기본 형식의 함 수 는 스 레 드 에서 실 행 될 수 있 습 니 다.
Unity 다 중 스 레 드 플러그 인
LOOM Multi Threading Framework 1.7
핵심 방법
// Unlike "StartMultithreadedWorkloadExecution", you will have to build your own IThreadWorkerObject.
// Downside: It requires some extra work. Upside: you got more controll over what goes in and comes out
// Infact: You can create you own polymorphed IThreadWorkerObject-array, each ellement being a completely different type. For example: the statemachines of enemies are IThreadWorkerObject's and the array contains completely different classes with enemies/AI-behaviours.
// < param name="workerObjects">An array of IThreadWorkerObject objects to be handled by the threads. If you want multiple cores/threads to be active, make sure that the number of IThreadWorkerObject's proves matches/exeeds your preferred number maxWorkingThreads. < /param>
// < param name="onComplete">Fired when all re-packaged workLoad-objects are finished computing< /param>
// < param name="onPackageExecuted">Fires foreach finished re-packaged set of workLoad-object< /param>
// < param name="maxThreads"> Lets you choose how many threads will be run simultaneously by the threadpool. Default: -1 == number of cores minus one, to make sure the MainThread has at least one core to run on. (quadcore == 1 core Mainthread, 3 cores used by the ThreadPoolScheduler)< /param>
// < param name="scheduler">If Null, a new ThreadPoolScheduler will be instantiated.< /param>
// < param name="safeMode">Executes all the computations within try-catch events, logging it the message + stacktrace< /param>
// < returns>A ThreadPoolScheduler that handles all the repackaged workLoad-Objects< /returns>
public static ThreadPoolScheduler StartMultithreadedWorkerObjects(IThreadWorkerObject[] workerObjects, ThreadPoolSchedulerEvent onCompleteCallBack, ThreadedWorkCompleteEvent onPackageExecuted = null, int maxThreads = -1, ThreadPoolScheduler scheduler = null, bool safeMode = true)
{
if (scheduler == null)
scheduler = CreateThreadPoolScheduler();
scheduler.StartASyncThreads(workerObjects, onCompleteCallBack, onPackageExecuted, maxThreads, safeMode);
return scheduler;
}
종결 어유 니 티 는 다 중 스 레 드 를 사용 할 수 있 지만 제한 이 많아 유 니 티 엔진 API 를 사용 하지 않 은 상태 에서 다 중 스 레 드 를 사용 해 다 중 핵 CPU 사용률 을 높 일 수 있다.일반적으로 대량의 계산 이 필요 한 알고리즘 내용 을 다 중 스 레 드 에 배치 하여 실행 할 수 있 으 며 논리 적 프레임 워 크 를 포함 하여 다 중 스 레 드 에 넣 어 실행 할 수 있 습 니 다.이 편 은 이론 성 이 비교적 강해 서 후기 에 실전 형 문장 이 속속 발 표 될 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.