.h文件 
 
UCLASS() 
class Test_API UMyUMG : public UUSerWidget 
{ 
    GENERATED_BODY() 
public: 
 
      /*请求使用ActiveTimer,相当于注册了一个定时器的函数*/ 
      void RequestUseActiveTimer(); 
 
private: 
 
      /*开始处理ActiveTimer,调用注册的定时器函数  */ 
     EActiveTimerReturnType HandleActiveTimer(double InCurrentTime, float InDeltaTime); 
 
   /*取消ActiveTimer,取消注册的定时器函数*/ 
    void CancelActiveTimer(); 
 
   
     /** The handle to the active timer,定时器函数的指针 */ 
    TWeakPtr<FActiveTimerHandle> ActiveTimerHandle; 
 
  /*测试用的一个计数变量,等于50的时候,停止执行处理函数*/ 
   int32 Count; 
}; 
 
 
.CPP文件 
 
void UMyUMG::RequestUseActiveTimer() 
{ 
     if (!ActiveTimerHandle.IsValid()) 
    { 
        /*获取UMG里的一个SWidget*/ 
          TSharedPtr<SWidget> ThisPtr = GetCachedWidget(); 
 
         /*给这个SWidget注册一个定时器执行函数,参数0.f表示多久后执行注册的函数*/ 
          ActiveTimerHandle = ThisPtr->RegisterActiveTimer(0.f, FWidgetActiveTimerDelegate::CreateUObject(this, &UMyUMG::HandleActiveTimer)); 
   } 
} 
 
 
 
void UMyUMG::CancelActiveTimer() 
{ 
      if (ActiveTimerHandle.IsValid()) 
     { 
             /*获取UMG里的一个SWidget*/ 
            TSharedPtr<SWidget> ThisPtr = GetCachedWidget(); 
 
           /*把这个SWidget注册的函数给取消注册了*/ 
           ThisPtr->UnRegisterActiveTimer(ActiveTimerHandle.Pin().ToSharedRef()); 
     } 
} 
 
 
 
/*执行期间的逻辑都在这里执行*/ 
EActiveTimerReturnType UMyUMG::HandleActiveTimer(double InCurrentTime, float InDeltaTime) 
{ 
       /*如果Count等于50就停止计数执行了*/ 
 
       if ( 50 ==Count ) 
       { 
 
 
                return EActiveTimerReturnType::Stop; 
       } 
        /*如果Count不等于50就继续计数和执行该函数*/ 
        ++ Count; 
       return EActiveTimerReturnType::Continue; 
}  
 
 
 |