



ITask e IFUTURE são interfaces disponíveis através de TTASK que se encontra na unit System.Threading…
Enquanto ITask aguarda uma chamada x.start; para iniciar o processamento em uma Thread própria, o IFuture já inicia o processamento de imediato e aceita aguardar uma resposta após o término de execução.
Exemplo ITask: (aguarda start para iniciar)
1 2 3 4 5 6 7 8 | tsk := TTask.create( procedure begin // código a ser executado end); tsk.start; //pode ou não pedir para aguardar conclusão: tsk.wait( 1000000); |
Exemplo IFuture: (inicia assim que for criado)
1 2 3 4 5 6 | tsk = TTask.Future<boolean>( function:boolean begin // código..... Result := true; // resposta para o processamento end); |
Resposta := tsk.value; // aguarda a Thread terminal e pega o resultado
Caso precise retornar mais de um valor, há possibilidades de utilizar um RECORD:
Veja o exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 | TPessoa = record nome:string; idade:integer; end; tsk = TTask.Future<TPessoa>( function:TPessoa begin // código..... Result.nome := 'Nome'; // resposta para o processamento Result.idade := 18; end); |
Recuperando o resultado:
1 2 3 4 | resposta := tsk.value; // aguarda a thread terminar e pega o resultado if resposta.idade>18 then // seu código |
Autor original: Amarildo Lacerda
Este texto foi escrito bom base no material disponível em:
https://github.com/amarildolacerda/docs/blob/master/DelphiXFirebid.pdf