kinect/AzureKinectForUE/Source/AzureKinect/Private/AzureKinectDeviceThread.cpp

71 lines
1.4 KiB
C++

#include "AzureKinectDeviceThread.h"
#include "HAL/PlatformProcess.h"
#include "AzureKinectDevice.h"
DEFINE_LOG_CATEGORY(AzureKinectThreadLog);
FAzureKinectDeviceThread::FAzureKinectDeviceThread(UAzureKinectDevice* Device) :
KinectDevice(Device),
Thread(nullptr),
StopTaskCounter(0)
{
Thread = FRunnableThread::Create(this, TEXT("FAzureKinectDeviceThread"), 0, TPri_BelowNormal); //windows default = 8mb for thread, could specify more
if (!Thread)
{
UE_LOG(AzureKinectThreadLog, Error, TEXT("Failed to create Azure Kinect thread."));
}
}
FAzureKinectDeviceThread::~FAzureKinectDeviceThread()
{
if (Thread)
{
delete Thread;
Thread = nullptr;
}
}
bool FAzureKinectDeviceThread::Init()
{
UE_LOG(AzureKinectThreadLog, Verbose, TEXT("Azure Kinect thread started."));
return true;
}
uint32 FAzureKinectDeviceThread::Run()
{
if (!KinectDevice)
{
UE_LOG(AzureKinectThreadLog, Error, TEXT("KinectDevice is null, could not run the thread"));
return 1;
}
while (StopTaskCounter.GetValue() == 0)
{
// Do the Kinect capture, enqueue, pop body frame stuff
KinectDevice->UpdateAsync();
}
return 0;
}
void FAzureKinectDeviceThread::Stop()
{
StopTaskCounter.Increment();
}
void FAzureKinectDeviceThread::EnsureCompletion()
{
Stop();
if (Thread)
{
Thread->WaitForCompletion();
}
}
FCriticalSection* FAzureKinectDeviceThread::GetCriticalSection()
{
return &CriticalSection;
}