void AAIO_Group::BeginPlay() {
Super::BeginPlay();
const auto Delay = FMath::FRandRange(.0f, 1.0f);
GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AAIO_Group::RunAioTick, 1.0f, true, Delay);
}
void AAIO_Group::EndPlay(const EEndPlayReason::Type EndPlayReason) {
Super::EndPlay(EndPlayReason);
GetWorld()->GetTimerManager().ClearTimer(TimerHandle);
}
void AAIO_Group::RunAioTick() {
const auto Workers = 8
const auto Num = Members.Num();
if (Num == 0) {
return;
}
ParallelFor(Workers, [this, Num](int32 ThreadIndex) {
int32 StartIndex = (Num * ThreadIndex) / Workers;
int32 EndIndex = (Num * (ThreadIndex + 1)) / Workers;
for (int32 Index = StartIndex; Index < EndIndex; ++Index) {
if (IsValid(Members[Index])) {
Members[Index]->AioTick();
}
}
}, false);
}
void AAIO_Group::BeginPlay() {
Super::BeginPlay();
const auto Delay = FMath::FRandRange(.0f, 1.0f);
GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AAIO_Group::RunAioTick, 1.0f, true, Delay);
}
void AAIO_Group::EndPlay(const EEndPlayReason::Type EndPlayReason) {
Super::EndPlay(EndPlayReason);
GetWorld()->GetTimerManager().ClearTimer(TimerHandle);
}
void AAIO_Group::RunAioTick() {
const auto Workers = 8
const auto Num = Members.Num();
if (Num == 0) {
return;
}
ParallelFor(Workers, [this, Num](int32 ThreadIndex) {
int32 StartIndex = (Num * ThreadIndex) / Workers;
int32 EndIndex = (Num * (ThreadIndex + 1)) / Workers;
for (int32 Index = StartIndex; Index < EndIndex; ++Index) {
if (IsValid(Members[Index])) {
Members[Index]->AioTick();
}
}
}, false);
}