UnReal中建立线程

来源:互联网 发布:算法的效率只与 编辑:程序博客网 时间:2024/05/16 12:33

在 .h 文件中添加如下内容


在 .cpp文件中添加如下内容

MultiThreading* MultiThreading::Runnable = NULL;MultiThreading::MultiThreading(float& EyePoint_X, float& EyePoint_Y, int& EyePoint_C){//Link to where data should be storeda = &EyePoint_X;b = &EyePoint_Y;c = &EyePoint_C;Thread = FRunnableThread::Create(this, TEXT("FEyeTracking"), 0, TPri_BelowNormal); //windows default = 8mb for thread, could specify more}MultiThreading::~MultiThreading(){delete Thread;Thread = NULL;}bool MultiThreading::Init(){//Init the Data if (successed){return true;}return false;}uint32 MultiThreading::Run(){//Initial wait before startingFPlatformProcess::Sleep(0.03);GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("执行需要的程序! %d"), cc));return 1;}void MultiThreading::Stop(){StopTaskCounter.Increment();}MultiThreading* MultiThreading::JoyInit(float& aa, float& bb, int& cc){if (!Runnable && FPlatformProcess::SupportsMultithreading()){Runnable = new MultiThreading(a, b, c);}return Runnable;}void MultiThreading::EnsureCompletion(){Stop();Thread->WaitForCompletion();}void MultiThreading::Shutdown(){if (Runnable){Runnable->EnsureCompletion();delete Runnable;Runnable = NULL;}}bool MultiThreading::IsThreadFinished(){if (Runnable) return Runnable->IsFinished();return true;}FEyeTrackingWorker* FEyeTrackingWorker::Runnable = NULL;FEyeTrackingWorker::FEyeTrackingWorker(float& EyePoint_X, float& EyePoint_Y, int& EyePoint_C){//Link to where data should be storedaa = &EyePoint_X;bb = &EyePoint_Y;cc = &EyePoint_C;Thread = FRunnableThread::Create(this, TEXT("FEyeTracking"), 0, TPri_BelowNormal); //windows default = 8mb for thread, could specify more}FEyeTrackingWorker::~FEyeTrackingWorker(){delete Thread;Thread = NULL;}bool FEyeTrackingWorker::Init(){//Init the Data HINSTANCE hDllInst = NULL;FString funcname = "gazeCalculation";hDllInst = LoadLibrary(TEXT("D:/sunjiankang/UE/dll/CreateAndLinkDLLTutSol - sjk/x64/Debug/CreateAndLinkDLLTut.dll"));if (hDllInst){GazeFromDll = (GazeFunc)FPlatformProcess::GetDllExport(hDllInst, *funcname);if (GazeFromDll){return true;}}return false;}uint32 FEyeTrackingWorker::Run(){//Initial wait before startingFPlatformProcess::Sleep(0.03);GazeFromDll(aa, bb, cc);//GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("GazeFromDll! %d"), cc));return 1;}void FEyeTrackingWorker::Stop(){StopTaskCounter.Increment();}FEyeTrackingWorker* FEyeTrackingWorker::JoyInit(float& aa, float& bb, int& cc){if (!Runnable && FPlatformProcess::SupportsMultithreading()){Runnable = new FEyeTrackingWorker(aa, bb, cc);}return Runnable;}void FEyeTrackingWorker::EnsureCompletion(){Stop();Thread->WaitForCompletion();}void FEyeTrackingWorker::Shutdown(){if (Runnable){Runnable->EnsureCompletion();delete Runnable;Runnable = NULL;}}bool FEyeTrackingWorker::IsThreadFinished(){if (Runnable) return Runnable->IsFinished();return true;}empty