复制之后再加入自己的逻辑就行
.h
#pragma once
#include "CoreMinimal.h"
#include "HAL/Runnable.h"
class FStreamWorker : public FRunnable {
public:
FStreamWorker();
~FStreamWorker() { Kill(); }
// FRunnable Interface Begin
virtual bool Init() override { return true; }
virtual uint32 Run() override;
virtual void Stop() override;
// FRunnable Interface End
bool Start();
void Kill();
private:
class FRunnableThread* Thread;
FCriticalSection Mutex;
FThreadSafeBool IsRunning;
};
.cpp
#include "StreamWorker.h"
FStreamWorker::FStreamWorker()
: Thread(nullptr)
, IsRunning(false)
{}
uint32 FStreamWorker::Run() {
while (IsRunning) {
// Do something
// ...
{
FScopeLock ScopeLock(&Mutex);
// Do something synchronous
// ...
}
FPlatformProcess::Sleep(0.06f);
}
return 0;
}
bool FStreamWorker::Start() {
IsRunning = true;
Thread = FRunnableThread::Create(this, *FString("ThreadName"), sizeof(FStreamWorker), TPri_Normal);
return Thread != nullptr;
}
void FStreamWorker::Stop() {
IsRunning = false;
Thread->Suspend(false);
}
void FStreamWorker::Kill() {
if (Thread) {
Thread->Kill();
Thread->WaitForCompletion();
Thread = nullptr;
}
}