« Création d'un callback de tâche (task) » : différence entre les versions

De Wiki1000
(Page créée avec « Un callback de tâche est une tâche déclenchée par la fin de l'exécution d'une autre tâche. {{Tip|Un callback doit être enregistré, une fois suffit.}} Exemple : ... »)
 
Aucun résumé des modifications
Ligne 10 : Ligne 10 :


Type
Type
   TestTaskCallBack = Class(TitObject)
   TestTaskCallBack = Class(TitTask)
   public
   public
     Function Execute():boolean;
     Function Execute():boolean;

Version du 29 mars 2020 à 13:54

Un callback de tâche est une tâche déclenchée par la fin de l'exécution d'une autre tâche.

Tip : Un callback doit être enregistré, une fois suffit.

Exemple :

<source lang="delphi"> unit TestSYFREWF; interface

Type

 TestTaskCallBack = Class(TitTask)
 public
   Function Execute():boolean;
   Procedure RegisterCallBack;
 end;

Implementation

{TestTaskCallBack}

Function TestTaskCallBack.Execute():boolean; //Function Execute():boolean; var idx:Integer; S:string; aMsg:TdbmQueueMessage; begin

 Result := True;
 // Add messages to the log
 ProgressMessage('On TestTask Terminate');
 if Assigned(UserContext.TaskContext) and Assigned(userContext.TaskContext.EventContext) then
  begin
    userContext.TaskContext.AddMessage('Has Task context');
    //
    aMsg := userContext.TaskContext.EventContext.ReceivedMsg;
    if Assigned(aMsg) then
     begin
       userContext.TaskContext.AddMessage(Format('Task reference: %s',[aMsg.ValueByNames(':message.source.reference')]));
       userContext.TaskContext.AddMessage(Format('Message parameters count:%d',[aMsg.Count]));
       for idx:=0 to aMsg.Count-1 do
        begin
          S := aMsg.DisplayStrings(idx);
          UserContext.TaskContext.AddMessage(S);
        end;
     end;
  end
  else ProgressMessage('no task context');

 Result := True;

end;

Procedure TestTaskCallBack.RegisterCallBack; //Procedure RegisterCallBack; var aReason:string; begin

 if not SubscribeToEvent(TTestTask.OnTerminateSuccessID(),aReason) then
  showMessage('subscribe failed '+aReason); 

end;

end. </source>