日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UE4笔记-进程/线程/网络/IO模块的相关问题记录

發布時間:2024/8/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UE4笔记-进程/线程/网络/IO模块的相关问题记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

吐槽:如果有Qt的開發經驗,會發現其實在比較底層編程理念UE4和Qt極其相識.很多類名和用法甚至都是相同的.

Q.創建線程類:

  UE4文檔沒有特別介紹關于線程模塊的文章,這里自己簡單記錄一下,備查.

?

目前來說UE4的線程模塊還是比較簡陋的,命名風格像C#和Qt的結合體-_,-

?

UE4的線程的有兩種比較常用的方式:

1.異步編程便捷幫助函數

2.自定義線程類

  有復雜線程邏輯、涉及線程通訊的,的用自定義類.簡單的用便捷幫助函數即可

?

說明:

1.異步編程便捷幫助函數

跟C#的異步編程Task類基本一致.

主要涉及的相關函數和類:

?

Asyncwait
AsyncThreadwait
AsyncTaskwait
AsyncPoolwait

?

?

?

?

?

例子:

wait

2.自定義線程類:

自定義線程類:一般UE4線程主要涉及FRunnableThread類和FRunnable類

FRunnableThread用于管理線程實例(如創建、暫停,銷毀等)

FRunnable則是用于實現線程邏輯的具體實現(繼承方式)

有三個虛函數和一個純虛函數

  ? Init() 初始化調用

  ? Stop() //暫停時調用

  Exit() 結束時調用
  Run() //運行時調用 會按照線程狀態依次執行.

用到線程的話,難免會涉及到互斥鎖:

UE4的互斥鎖是:FCriticalSection類。

FCriticalSection還有與之相關個FScopeLock類

FScopeLock主要是防止線程異常拋出異常死鎖的.

?最后說明一下,和Qt/C# 一樣,只有Run函數體里面的代碼和New的變量,屬于子線程.而FRunnable類對象本身是屬于創建他的線程的

這里列一個我用于IO本地圖片的Thread栗子:

.h

class FThread_IO : public FRunnable { public:FThread_IO();~FThread_IO(); public:bool Init() override{ return true; }uint32 Run() override;void Stop() override{}
   void Exit override();   TArray<FData_LoadTexture2DCommand> arr_waitLoadFile;
};

?

.cpp

FThread_IO::FThread_IO() { }FThread_IO::~FThread_IO() {this->Stop(); }uint32 FThread_IO::Run() {/** 進行本地圖片的IO讀取處理 線程 */static int i= 1;static int iWidth, iHeight;static UIOHelper *helper = NewObject<UIOHelper>();while (true){FCriticalSection Thread_lock;if (arr_waitLoadFile.Num() > 0){i++;Thread_lock.Lock();bool bvaild = false;auto command = arr_waitLoadFile[0];arr_waitLoadFile.RemoveAt(0);auto tue = helper->LoadTexture2D_FromFile(command.target_UIItem->ImageLocalFilePath, EJoyImageFormats::JPG, bvaild, iWidth, iHeight);command.target_UIItem->SetImage_texture(tue);GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT(" load finished : %d"), arr_waitLoadFile.Num()));Thread_lock.Unlock();}else{FPlatformProcess::Sleep(0.03f);}}return 0; }void FThread_IO::Exit() {GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT(" thread finished")); }

創建線程實例:

FString newThreadName("MyThread"); FThread_IO *thread_ResReader = nullptr; auto mgr = FRunnableThread::Create(thread_ResReader, newThreadName.GetCharArray().GetData(), 0, TPri_BelowNormal);

?

Q.創建進程,打開額外程序方法:

FPlatformProcess::CreateProc(TEXT("程序路徑");

Q.UE4進程通訊(Pipe):

以Window net form 為例:

wait

轉載于:https://www.cnblogs.com/linqing/p/5767359.html

總結

以上是生活随笔為你收集整理的UE4笔记-进程/线程/网络/IO模块的相关问题记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。