UE4多线程任务系统详解

本文详细介绍了UE4中的多线程任务系统,包括FQueuedThreadPool、FQueuedThread、FRunnableThread和FEvent等关键数据类型。通过自定义任务类并使用FAutoDeleteAsyncTask模板进行异步或同步执行。文章阐述了任务调度、线程创建及工作循环的过程,展示了如何启动和执行多线程任务。
摘要由CSDN通过智能技术生成
首先,了解一下该系统重要的数据类型.


1.  FQueuedThreadPool:虚基类,队列线程池,   FQueuedThreadPoolBase继承自FQueuedThreadPool, 
    FQueuedThreadPoolBase维护了一个 TArray<IQueuedWork*> QueuedWork (需要被执行的工作),   TArray<FQueuedThread*> AllThreads (所       有的线程)
     TArray<FQueuedThread*> QueuedThreads ( 空闲的线程)

2.  FQueuedThread继承自 FRunnable,  代表了线程的执行体,但并非线程本身。一个线程创建后将会执行FRunnable的Run()函数.
3.  FRunnableThread代表了线程本身,该类会派生出平台相关的子类,win32下对应的是 FRunnableThreadWin,建议读者看看某个平台下的具体实     现。在 创建时需要指定一个FRunnable,用于线程执行。
4. FEvent: 虚基类,提供了事件操作的接口,用于线程的激活挂起, 该类会派生出平台相关的子类,win32下对应的是 FEventWin。
    两个重要接口: Wait()将会使线程挂起, Trigger()将会激活线程,配对使用。

了解了相关的数据类型后,可以开始剖析多线程任务系统的流程了,先从AsyncWork.h开始。
AsyncWork.h中有几个使用多线程任务系统的例子,先来了解我们如何使用多线程来执行任务。

大体流程如下:    
   先自定义一个任务类,用于执行我们的任务
    class ExampleAutoDeleteAsyncTask : public FNonAbandonableTask
    {
        friend class FAutoDeleteAsyncTask<ExampleAutoDeleteAsyncTask>;

        //核心接口,   这里便是任务的具体执行内容.
        void DoWork()
        {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值