在 .h 文件中添加如下内容
在 .cpp文件中添加如下内容
MultiThreading* MultiThreading::Runnable = NULL;
MultiThreading::MultiThreading(float& EyePoint_X, float& EyePoint_Y, int& EyePoint_C)
{
//Link to where data should be stored
a = &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 starting
FPlatformProcess::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 stored
aa = &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 starting
FPlatformProcess::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