? ,,

成人aa视频在线观看_色婷婷精品久久二区二区蜜臂av _国产一区二区三区在线观看免费 _韩日欧美一区二区三区_午夜成人免费视频_欧美综合久久久_国产精品国产三级国产普通话99 _福利一区二区在线观看_奇米精品一区二区三区在线观看_91精品国产综合久久福利_免费精品视频在线_狠狠色丁香久久婷婷综合_中_色一区在线观看_91福利国产成人精品照片_在线观看www91_日韩高清在线一区

聯系我們

給我們留言

聯系我們

地址:福建省晉江市青陽街道洪山路國際工業設計園納金網

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當前位置:主頁 > 3D教程 > 圖文教程

E4][multi-thread]如何創建和終止線程:FRunnableThrea

來源: 52vr | 責任編輯:傳說的落葉 | 發布時間: 2019-06-06 08:55 | 瀏覽量:

[UE4][multi-thread]如何創建和終止線程:FRunnableThread::Create()

 

原文:https://wiki.unrealengine.com/Multi-Threading:_How_to_Create_Threads_in_UE4

相關文檔

FRunnable

https://docs.unrealengine.com/latest/INT/API/Runtime/Core/HAL/FRunnable/index.html

FRunnableThread

https://docs.unrealengine.com/latest/INT/API/Runtime/Core/HAL/FRunnableThread/index.html

 

 

h頭文件:

 
  1. //~~~~~ Multi Threading ~~~  
  2. class FPrimeNumberWorker : public FRunnable  
  3. {     
  4.     /** Singleton instance, can access the thread any time via static accessor, if it is active! */  
  5.     static  FPrimeNumberWorker* Runnable;  
  6.    
  7.     /** Thread to run the worker FRunnable on */  
  8.     FRunnableThread* Thread;  
  9.    
  10.     /** The Data Ptr */  
  11.     TArray<uint32>* PrimeNumbers;  
  12.    
  13.     /** The PC */  
  14.     AVictoryGamePlayerController* ThePC;  
  15.    
  16.     /** Stop this thread? Uses Thread Safe Counter */  
  17.     FThreadSafeCounter StopTaskCounter;  
  18.    
  19.     //The actual finding of prime numbers  
  20.     int32 FindNextPrimeNumber();  
  21.    
  22. private:  
  23.     int32               PrimesFoundCount;  
  24. public:  
  25.    
  26.     int32               TotalPrimesToFind;  
  27.    
  28.     //Done?  
  29.     bool IsFinished() const  
  30.     {  
  31.         return PrimesFoundCount >= TotalPrimesToFind;  
  32.     }  
  33.    
  34.     //~~~ Thread Core Functions ~~~  
  35.    
  36.     //Constructor / Destructor  
  37.     FPrimeNumberWorker(TArray<uint32>& TheArray, const int32 IN_PrimesToFindPerTick, AVictoryGamePlayerController* IN_PC);  
  38.     virtual ~FPrimeNumberWorker();  
  39.    
  40.     // Begin FRunnable interface.  
  41.     virtual bool Init();  
  42.     virtual uint32 Run();  
  43.     virtual void Stop();  
  44.     // End FRunnable interface  
  45.    
  46.     /** Makes sure this thread has stopped properly */  
  47.     void EnsureCompletion();  
  48.    
  49.    
  50.    
  51.     //~~~ Starting and Stopping Thread ~~~  
  52.    
  53.    
  54.    
  55.     /*  
  56.         Start the thread and the worker from static (easy access)!  
  57.         This code ensures only 1 Prime Number thread will be able to run at a time.  
  58.         This function returns a handle to the newly started instance. 
  59.     */  
  60.     static FPrimeNumberWorker* JoyInit(TArray<uint32>& TheArray, const int32 IN_TotalPrimesToFind, AVictoryGamePlayerController* IN_PC);  
  61.    
  62.     /** Shuts down the thread. Static so it can easily be called from outside the thread context */  
  63.     static void Shutdown();  
  64.    
  65.     static bool IsThreadFinished();  
  66. };  

 

cpp文件:

 
  1. //***********************************************************  
  2. //Thread Worker Starts as NULL, prior to being instanced  
  3. //      This line is essential! Compiler error without it  
  4. FPrimeNumberWorker* FPrimeNumberWorker::Runnable = NULL;  
  5. //***********************************************************  
  6.    
  7. FPrimeNumberWorker::FPrimeNumberWorker(TArray<uint32>& TheArray, const int32 IN_TotalPrimesToFind, AVictoryGamePlayerController* IN_PC)  
  8.     : ThePC(IN_PC)  
  9.     , TotalPrimesToFind(IN_TotalPrimesToFind)  
  10.     , StopTaskCounter(0)  
  11.     , PrimesFoundCount(0)  
  12. {  
  13.     //Link to where data should be stored  
  14.     PrimeNumbers = &TheArray;  
  15.   
  16.     Thread = FRunnableThread::Create(this, TEXT("FPrimeNumberWorker"), 0, TPri_BelowNormal); //windows default = 8mb for thread, could specify more  
  17. }  
  18.    
  19. FPrimeNumberWorker::~FPrimeNumberWorker()  
  20. {  
  21.     delete Thread;  
  22.     Thread = NULL;  
  23. }  
  24.    
  25. //Init  
  26. bool FPrimeNumberWorker::Init()  
  27. {  
  28.     //Init the Data   
  29.     PrimeNumbers->Empty();  
  30.     PrimeNumbers->Add(2);  
  31.     PrimeNumbers->Add(3);  
  32.    
  33.     if(ThePC)   
  34.     {  
  35.         ThePC->ClientMessage("**********************************");  
  36.         ThePC->ClientMessage("Prime Number Thread Started!");  
  37.         ThePC->ClientMessage("**********************************");  
  38.     }  
  39.     return true;  
  40. }  
  41.    
  42. //Run  
  43. uint32 FPrimeNumberWorker::Run()  
  44. {  
  45.     //Initial wait before starting  
  46.     FPlatformProcess::Sleep(0.03);  
  47.    
  48.     //While not told to stop this thread   
  49.     //      and not yet finished finding Prime Numbers  
  50.     while (StopTaskCounter.GetValue() == 0 && ! IsFinished())  
  51.     {  
  52.         PrimeNumbers->Add(FindNextPrimeNumber());  
  53.         PrimesFoundCount++;  
  54.    
  55.         //***************************************  
  56.         //Show Incremental Results in Main Game Thread!  
  57.    
  58.         //  Please note you should not create, destroy, or modify UObjects here.  
  59.         //    Do those sort of things after all thread are completed.  
  60.    
  61.         //    All calcs for making stuff can be done in the threads  
  62.         //       But the actual making/modifying of the UObjects should be done in main game thread.  
  63.         ThePC->ClientMessage(FString::FromInt(PrimeNumbers->Last()));  
  64.         //***************************************  
  65.    
  66.         //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  67.         //prevent thread from using too many resources  
  68.         //FPlatformProcess::Sleep(0.01);  
  69.         //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  70.     }  
  71.    
  72.     //Run FPrimeNumberWorker::Shutdown() from the timer in Game Thread that is watching  
  73.         //to see when FPrimeNumberWorker::IsThreadFinished()  
  74.    
  75.     return 0;  
  76. }  
  77.    
  78. //stop  
  79. void FPrimeNumberWorker::Stop()  
  80. {  
  81.     StopTaskCounter.Increment();  
  82. }  
  83.    
  84. FPrimeNumberWorker* FPrimeNumberWorker::JoyInit(TArray<uint32>& TheArray, const int32 IN_TotalPrimesToFind, AVictoryGamePlayerController* IN_PC)  
  85. {  
  86.     //Create new instance of thread if it does not exist  
  87.     //      and the platform supports multi threading!  
  88.     if (!Runnable && FPlatformProcess::SupportsMultithreading())  
  89. <li micxptag"="" style="overflow-wrap: break-word; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; font-size: 1em; border-left: 1px solid rgb(209, 215, 220); line-height: 18px;">虛幻4,ue4,虛幻4基礎,虛幻4高級,虛幻4技巧


相關文章
網友評論

您需要登錄后才可以發帖 登錄 | 立即注冊

關閉

全部評論:0條

推薦
熱門
成人aa视频在线观看_色婷婷精品久久二区二区蜜臂av _国产一区二区三区在线观看免费 _韩日欧美一区二区三区_午夜成人免费视频_欧美综合久久久_国产精品国产三级国产普通话99 _福利一区二区在线观看_奇米精品一区二区三区在线观看_91精品国产综合久久福利_免费精品视频在线_狠狠色丁香久久婷婷综合_中_色一区在线观看_91福利国产成人精品照片_在线观看www91_日韩高清在线一区

          精品视频999| 色综合中文字幕国产 | 亚洲精品免费在线观看| 国产精品视频看| 一区二区三区在线视频观看| 亚洲伊人伊色伊影伊综合网| 亚洲成人高清在线| 黄色精品一二区| 99久久er热在这里只有精品15| 97精品视频在线观看自产线路二| 官网99热精品| 日本一区二区三不卡| 91国偷自产一区二区开放时间| 欧美日韩国产综合一区二区三区| 欧美电影免费观看高清完整版在 | 久久久精品一品道一区| 国产精品剧情在线亚洲| 亚洲成人自拍一区| 国产精品羞羞答答xxdd| 成人免费视频网站入口| 日韩成人在线资源| 欧美美女bb生活片| 国产欧美精品一区二区色综合 | 成人免费视频免费观看| 懂色av一区二区三区在线播放| 快播日韩欧美| 欧美视频一区二区三区四区 | 日韩黄色在线观看| 高清成人在线观看| 久久青青草综合| 欧美三区在线观看| 国产欧美精品一区| 天天影视网天天综合色在线播放| 国产sm精品调教视频网站| 国产在线精品一区二区中文 | 亚洲日本一区二区| 久久国产精品一区二区| 91免费观看| 色婷婷狠狠综合| 国产亚洲成aⅴ人片在线观看| 一区2区3区在线看| av中文字幕亚洲| 一本大道久久a久久精二百| 26uuu成人网一区二区三区| 亚洲成人免费影院| 91在线播放视频| 色天使久久综合网天天| 国产精品美女久久久久久2018| 狠狠色伊人亚洲综合成人| 热舞福利精品大尺度视频| 日韩欧美成人午夜| 视频一区在线播放| 国产伦精品一区二区| 日韩一区二区免费高清| 亚洲va欧美va国产va天堂影院| 操一操视频一区| 欧美疯狂性受xxxxx喷水图片| 一区2区3区在线看| 成人片在线免费看| 欧美一级爆毛片| 三级欧美在线一区| 久久久久久久久四区三区| 日韩精品一区二区三区三区免费| 无码av免费一区二区三区试看| 国产福利不卡| 精品国产91乱码一区二区三区| 亚洲午夜视频在线| 久草热久草热线频97精品| 日韩精品中午字幕| 国内精品视频666| 一区二区在线不卡| 亚洲乱码一区二区三区在线观看| 91亚洲大成网污www| 8v天堂国产在线一区二区| 天天爽夜夜爽夜夜爽精品视频| 久久亚洲综合网| 国产精品成人一区二区三区夜夜夜| www.亚洲激情.com| 欧美一区二区三区视频免费| 欧美a一区二区| 致1999电视剧免费观看策驰影院| 一区二区三区在线播放| 精品综合久久| 国产精品理论片在线观看| 91免费视频网| 久久亚洲捆绑美女| 99在线精品一区二区三区| 日韩精品一区二区三区三区免费| 国产在线一区观看| 欧美日韩日日摸| 国产一区啦啦啦在线观看| 欧美色网一区二区| 精品一区二区久久久| 欧美日韩高清一区二区三区| 国产在线一区二区综合免费视频| 欧美日韩在线观看一区二区 | 欧美疯狂性受xxxxx喷水图片| 美女网站色91| 欧洲色大大久久| 久久99在线观看| 欧美精品日韩精品| 懂色av一区二区三区免费看| 91精品国产入口| 成人免费视频一区| 久久久精品综合| 国产一区在线免费| 一区二区视频在线| 一本一本大道香蕉久在线精品| 美女视频网站久久| 日韩欧美中文字幕一区| 99精品视频在线观看免费| 国产欧美日韩在线| 欧美日韩亚洲在线| 免费高清在线一区| 91精品欧美久久久久久动漫| 99在线精品视频| 中文字幕一区二区在线观看| 欧美1o一11sex性hdhd| 亚洲成av人片www| 欧美体内she精高潮| 成人高清在线视频| 1024精品合集| 中文字幕欧美日韩一区二区三区 | 欧美肥妇free| www.性欧美| 亚洲欧美偷拍三级| 欧美午夜精品一区二区三区| 国产精品亚洲视频| 国产精品二区一区二区aⅴ污介绍| 欧美精品久久久| 久久精品国产**网站演员| 精品久久五月天| 日本黑人久久| 国产一区高清在线| 欧美国产激情一区二区三区蜜月| 青青草成人激情在线| 国产在线视频不卡二| 国产日韩精品视频一区| 青青草成人激情在线| 久久爱www久久做| 欧美激情一区二区三区四区| 亚洲永久激情精品| 成人免费福利片| 亚洲一级不卡视频| 日韩三级中文字幕| 日韩欧美视频一区二区三区四区| 国产在线精品一区二区| 亚洲欧洲制服丝袜| 欧美一卡在线观看| 日本在线高清视频一区| 从欧美一区二区三区| 亚洲夂夂婷婷色拍ww47| 日韩精品中文字幕一区| 日本精品二区| 99精品国产视频| 日本成人在线电影网| 国产欧美va欧美不卡在线| 欧美日韩中字一区| 久久久免费看| 不卡视频在线观看| 日韩 欧美一区二区三区| 国产人久久人人人人爽| 欧美亚州韩日在线看免费版国语版| av电影成人| 国产精品综合一区二区三区| 亚洲综合无码一区二区| 久久这里只有精品6| 欧美日韩免费视频| 日本a级片久久久| 91麻豆国产香蕉久久精品| 狂野欧美性猛交blacked| 亚洲欧美日韩国产综合在线 | 成人欧美一区二区三区视频网页| 91精品啪在线观看国产60岁| 亚洲国产精品一区二区第一页| 成人欧美一区二区三区在线观看| 精品在线亚洲视频| 亚洲国产美女搞黄色| 亚洲欧洲日韩在线| 久久人人97超碰com| 欧美肥妇bbw| 欧美专区在线观看一区| 亚洲成人第一| 久久另类ts人妖一区二区| 91蜜桃网址入口| 成人丝袜18视频在线观看| 韩国理伦片一区二区三区在线播放| 亚洲三级在线播放| 久久久精品综合| 精品88久久久久88久久久| 91精品黄色片免费大全| 欧美亚洲国产bt| 日本精品视频一区二区| 亚洲一区二区三区午夜| 日韩精品一区二区三区外面| 精品在线一区| 国产区一区二区| 国产精品久久精品视| 成人资源av| 国产精品视频福利|