当前位置: 首页 > news >正文

网站 信用卡支付接口百度seo指数查询

网站 信用卡支付接口,百度seo指数查询,大连承揽营销型网站公司,成全视频免费观看在线看小说下载目录 概念 函数说明 注意事项 #xff08;1#xff09;线程安全问题 #xff08;2#xff09;依赖特定线程执行的任务限制 #xff08;3#xff09;任务执行顺序和时间不确定性 使用示例 概念 AsyncTask 允许开发者将一个函数或者一段代码逻辑提交到特定的线程去执… 目录 概念 函数说明 注意事项 1线程安全问题 2依赖特定线程执行的任务限制 3任务执行顺序和时间不确定性 使用示例 概念 AsyncTask 允许开发者将一个函数或者一段代码逻辑提交到特定的线程去执行这样做的好处是可以避免阻塞当前线程比如主线程充分利用多线程的优势实现并发执行任务提升程序的响应性和整体性能。例如在游戏开发中可以将一些耗时的操作如文件加载、网络通信、复杂的数据计算等通过 AsyncTask 放到后台线程去执行让主线程能够继续处理用户输入、渲染画面等对实时性要求较高的任务防止游戏出现卡顿现象。 函数说明 AsyncTask 函数原型如下 templatetypename ThreadType, typename FunctionType FAsyncTaskThreadType, FunctionType AsyncTask(ThreadType InThreadType, FunctionType InFunction); AsyncTask 函数接收两个参数 1InThreadType 参数这个参数用于指定要将任务提交到哪个线程去执行通常是ENamedThreads枚举类型中的一个值。ENamedThreads 定义了虚幻引擎中一些常见的、有特定用途的线程类型比如 ENamedThreads::AnyThread表示任务可以在任意可用的线程中执行引擎会根据当前的线程资源情况自动选择一个合适的线程来运行该任务。 ENamedThreads::GameThread专门用于执行和游戏逻辑紧密相关的任务像处理游戏中的角色行为、更新游戏状态等大部分核心游戏逻辑通常都在游戏线程中执行。很多时候需要将一些其他线程中的操作结果反馈到游戏线程中例如更新 UI 元素因为 UI 的更新通常要求在游戏线程进行就可以使用 AsyncTask 将相关任务提交到游戏线程来完成。 2InFunction 参数这个参数是一个可调用对象比如函数指针、lambda 表达式等它定义了要在指定线程中实际执行的任务逻辑。可以将具体需要异步执行的代码封装在这个可调用对象里例如一个简单的 lambda 表达式示例如下 AsyncTask(ENamedThreads::BackgroundThread, []() {// 这里放置需要在后台线程执行的任务逻辑比如加载资源文件FString FilePath TEXT(Path/To/SomeResourceFile.txt);FString FileContent;FFileHelper::LoadFileToString(FileContent, *FilePath);// 可以继续添加对加载后的资源文件内容进行处理等其他逻辑 }); 注意事项 1线程安全问题 虽然 AsyncTask 提供了方便的异步任务执行机制但在不同线程之间传递数据或者操作共享资源时需要特别注意线程安全问题。例如如果一个异步任务在后台线程中修改了某个共享变量而主线程或者其他线程也会访问这个变量就可能导致数据不一致、程序崩溃等并发访问冲突问题。解决办法通常是使用合适的多线程同步机制如临界区 FCriticalSection 、互斥锁 FMutex 等来保护对共享资源的访问确保在多线程环境下数据的一致性和操作的正确性。 使用临界区 FCriticalSection的示例代码如下通过如下方式来保护对共享变量 SharedVariable 的访问保证在同一时刻只有一个线程能对其进行修改或读取操作避免了并发冲突。 #include CoreMinimal.h #include HAL/CriticalSection.hint SharedVariable 0; FCriticalSection CriticalSection;void BackgroundTaskFunction() {FScopeLock Lock(CriticalSection);SharedVariable; }void SomeFunction() {AsyncTask(ENamedThreads::BackgroundThread, BackgroundTaskFunction);// 在主线程或者其他可能访问 SharedVariable 的线程中同样需要加锁保护访问FScopeLock Lock(CriticalSection);UE_LOG(LogTemp, Log, TEXT(SharedVariable value: %d), SharedVariable); } 2依赖特定线程执行的任务限制 有些任务对执行的线程有严格要求比如UI 更新操作通常要求在游戏线程中进行如果错误地将这类任务提交到其他非游戏线程执行可能会导致程序出现未定义行为比如 UI 元素无法正确显示、界面闪烁或者程序崩溃等问题。因此在使用 AsyncTask 时要清楚了解任务的性质以及对执行线程的要求确保将任务提交到合适的线程中去执行。 例如当需要更新游戏中的 UI 文本显示时必须通过 AsyncTask 将更新 UI 的任务逻辑提交到游戏线程示例如下 void UpdateUIText(const FString NewText) {AsyncTask(ENamedThreads::GameThread, [NewText]() {// 获取对应的 UI 控件并更新其文本内容GetUITextWidget 函数用于获取 UI 文本控件UTextWidget* TextWidget GetUITextWidget();if (TextWidget! nullptr){TextWidget-SetText(FText::FromString(NewText));}}); } 3任务执行顺序和时间不确定性 由于 AsyncTask 是将任务放入线程的任务队列中等待执行并且不同线程的调度顺序以及执行时间受到多种因素影响如系统负载、线程优先级等所以无法准确保证提交的异步任务一定会按照调用 AsyncTask 的顺序依次执行也不能精确预测任务具体的执行时间。 例如连续提交了几个异步任务到同一个线程中可能会因为系统资源分配、其他高优先级任务插入等原因导致后提交的任务反而先执行或者任务执行的时间间隔比预期的长很多。 在一些对任务执行顺序和时间有严格要求的场景下需要额外设计一些同步机制或者逻辑来确保任务按照期望的顺序和时间执行。比如可以通过信号量、条件变量等机制来协调多个异步任务之间的执行顺序或者添加一些等待和检查机制来确保某个关键任务完成后再执行后续任务等。 使用示例 通过 AsyncTask 实现累加求和任务。 1. 新建一个空白c类“ThreadSubsystem”继承“UGameInstanceSubsystem”然后添加三个成员函数“InitAsyncTask”、“GetMyNum”、“SetMyNum”和一个成员变量“MyNum” 2. “InitAsyncTask”实现如下。首先将类成员变量 MyNum 的值复制到局部变量 CopyNum 中然后在一个异步任务提交到 ENamedThreads::AnyThread 也就是任意可用线程中计算从 0 到 9999 的累加和并累加到 CopyNum 上接着让线程休眠 0.5 秒之后再通过另一个异步任务提交到 ENamedThreads::GameThread 游戏线程将计算得到的总和 sum 设置回类的成员变量 MyNum 中并输出一条包含总和值的日志信息以此展示了在不同线程中执行任务以及跨线程更新数据的流程。 3. “GetMyNum”、“SetMyNum”实现如下。其中“SetMyNum”函数主要目的是设置 MyNum 的值。不过在设置值之前做了一个线程判断即检查当前是否处于游戏线程中。如果当前不是在游戏线程通过 AsyncTask 将设置值的操作重新提交到游戏线程中去执行以此来确保对 MyNum 成员变量的赋值操作符合线程安全的要求通常很多与游戏逻辑相关的变量操作需要在游戏线程中进行以避免出现未定义行为。 4. 编译后在关卡蓝图中设置通过按键触发函数“InitAsyncTask” 调用后可以看到输出的日志信息 “ThreadSubsystem”类 代码 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h #include SimpleRunnable.h #include HAL/ThreadManager.h #include ThreadSubsystem.generated.hUCLASS() class STUDY_API UThreadSubsystem : public UGameInstanceSubsystem {GENERATED_BODY()public:virtual bool ShouldCreateSubsystem(UObject* Outer) const override;virtual void Initialize(FSubsystemCollectionBase Collection) override;virtual void Deinitialize() override;public:UFUNCTION(BlueprintCallable)void InitAsyncTask();int32 GetMyNum();void SetMyNum(int32 InInt);void BloackThreadPool();protected:int32 MyNum 0;}; // Fill out your copyright notice in the Description page of Project Settings.#include Thread/ThreadSubsystem.hbool UThreadSubsystem::ShouldCreateSubsystem(UObject* Outer) const {return true; }void UThreadSubsystem::Initialize(FSubsystemCollectionBase Collection) {Super::Initialize(Collection); }void UThreadSubsystem::Deinitialize() {Super::Deinitialize(); }void UThreadSubsystem::InitAsyncTask() {int32 CopyNum MyNum;AsyncTask(ENamedThreads::AnyThread, [this, CopyNum]() {int32 sum CopyNum;for (size_t i 0; i 10000; i){sum i;}FPlatformProcess::Sleep(0.5);AsyncTask(ENamedThreads::GameThread, [this, sum]() {SetMyNum(sum);UE_LOG(LogTemp, Warning, TEXT(Sum: %d), sum);});}); }int32 UThreadSubsystem::GetMyNum() {return MyNum; }void UThreadSubsystem::SetMyNum(int32 InInt) {if (!IsInGameThread()){AsyncTask(ENamedThreads::GameThread, [this, InInt]() {SetMyNum(InInt);});}MyNum InInt; }
http://www.dnsts.com.cn/news/174401.html

相关文章:

  • 西安门户网站开发网站商城建设基本流程
  • 佛山网站的优化佛山做外贸网站的公司吗
  • 广东企业网站建设公司seo官网优化
  • 网站开发众筹想自己做网站推广
  • 哲学专业特色建设网站建设一个网站的流程.
  • wordpress 批量插件苏州seo公司 翼好
  • 中山哪家做网站好广东华迪工程建设监理公司网站
  • 建设造价信息网站常州百度快速优化
  • 域名备案企业网站内容陇南地网站seo
  • 电子公章在线制作网站保山市建设厅网站
  • 一些做义工的旅游网站国家建设管理信息网站
  • 用记事本做网站怎样用模板建一个网站
  • 英铭网站建设网站信息抽查评估
  • 大气医院网站模板网页设计的主题分析
  • 长沙网站排名优化价格商业性质网站设计
  • html5公司手机网站模板wordpress照片库
  • 个人的网站备案多少钱网站编辑工作
  • 涂料网站建设广州做网站优化公司报价
  • 河南郑州网站推广优化品牌推广与传播
  • 做吃的教程网站wordpress the7主题
  • 网站推广对接网站建设工作室创业计划书
  • 濮阳网站建设熊掌网络开县网站制作
  • 购物网站建设行业现状网络运营的岗位职责及任职要求
  • 公司网站建设沈阳百度搜到自己网站
  • 织梦 大型综合旅游网站 源码视频网站开发项目
  • 建设部网标准下载网站网站轮播图教程
  • 四川住房城乡和城乡建设厅网站济南优化官网公司
  • 美食推荐网站模板想把自己做的网站放到网上
  • 优质ppt网站wordpress后台多媒体不显示缩
  • 化妆品网站建设策划书制作网制作网站建设的公司