UE4 多线程使用tip
在GameThread線程之外的其他線程中,不允許做一下事情
1. 不要 spawning / modifying / deleting UObjects / AActors
2. 不要使用定時器 TimerManager
3. 不要使用任何繪制接口,例如 DrawDebugLine
4. 如果想在主線程中異步處理(也就是分幀處理),可以使用一下接口(在 Async.h 中)
??? AsyncTask(ENamedThreads::GameThread, [&]() {
??????? UE_LOG(LogMyTest, Warning, TEXT("--- UMyGameInstance::MyAsyncTask"));
??????? SpawnActor(3);
??? });
線程喚醒、懸掛
1. FEvent* ThreadSuspendedEvent;
2. 線程懸掛。A線程中調用 ThreadSuspendedEvent->Wait();,A線程就會懸掛主,必須由B線程調用 ThreadSuspendedEvent->Trigger(); 才能喚醒A線程。
3. 所以如果直接在主線程(GameThread)中調用 ThreadSuspendedEvent->Wait();,那就看起像卡死了。
編輯器模式下進行多線程開發注意事項
1. PIE模式下,與新開的線程交互正常;如果退出PIE模式,PIE中的實例對象都會被標記為坐等回收的對象 InValid,此時如果新開的線程還在Run中跑用到PIE中的實例對象,將造成 編輯器崩潰。
2. 最好在你的游戲退出時 FPrimeNumberWorker ShutDown一下,方便下次測試。
void UMyGameInstance::Shutdown()
{
??? FPrimeNumberWorker::Shutdown();
??? Super::Shutdown();
}
總結
以上是生活随笔為你收集整理的UE4 多线程使用tip的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 24岁年轻人,月入5000存款3万,不想
- 下一篇: 为什么越来越多的人不发朋友圈了:不愿晒的