Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

di il
5 risposte

Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

Buongiorno,

avrei bisogno di una dritta riguardo la gestione dei risultati di un processo asincrono.

Passo delle pagine di un documento multipagina ad un processo asincrono OCR in ordine corretto, ma la sequenza dei risultati poi dipende dal tempo di elaborazione della singola pagina, quindi i risultati tornano in ordine casuale.

Domanda: Quale è l'approccio più semplice e che meno rallenta l'app per mettere i risultati nell'ordine originale?

procedure TfrmMain.actSelectPagesExecute(Sender: TObject);
var
  i: Integer;
begin
  if ImageCount > 0 then
    begin
      memText.Lines.Clear;
      for i := 0 to ImageCount do
        ExtractText(i);
    end;
end;

procedure TfrmMain.ExtractText(i: Integer);
begin
  OCR.Picture.Assign(Bitmap(i));
  OCR.Recognize(0,
    procedure (const Result: TResult)
      begin
        memText.Lines.Add(Result.Text);
      end);
end;
Mille grazie in anticipo,
Alessandro

5 Risposte

  • Re: Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

    Nessuna o qualsiasi, ovviamente.
    Il tempo è determinato dell'elaborazione più lenta
  • Re: Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

    A livello di semplicità e velocità di codice penso che ci sia una differenza tra (1) attendere il termine di tutti i processi per poi ordinare i singoli risultati e (2) attendere la disponibilità del risultato della pagina successiva, quindi procedere con l'inserimento del testo mentre l'elaborazione delle pagine mancanti continua.

    Non avendo minima esperienza pratica riguardo il riordinamento dei risultati di processi asincroni volevo chiedervi la vostra opinione. Potete ovviamente anche rispondere: "Sii creativo e prova!" : )

    Ale
  • Re: Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

    al.delphi ha scritto:


    Domanda: Quale è l'approccio più semplice e che meno rallenta l'app per mettere i risultati nell'ordine originale?
    Forse non ho capito la tua esigenza, ma sarebbe sufficiente attendere l'esecuzione asincrona dei processi che generano i risultati, tenendone eventualmente traccia in base alla pagina affidata per l'elaborazione, e alla fine proseguire quando tutti i processi sono terminati ordinando i singoli risultati in base al numero di pagina assegnato all'origine.

    Il tuo problema qual è... contrassegnare i singoli processi? Attendere l'esecuzione di tutti i processi? Effettuare l'ordinamento quando sono terminati?

    Spiega meglio.

    Ciao!
  • Re: Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

    Come abbozzato nel codice del post sopra, il processo asincrono dispone del numero della pagina (i). Se per ogni pagina venisse creato dinamicamente su un panel un memo con "nome memo := numero pagina" (ad es. memo_0), tramite il commando repeat l'app può attendere finché sul panel si verifichi "quantità memo dinamici = totale pagine", quindi versare secondo il nome dei memo il loro contenuto nel memo definitivo e distruggere il panel con i memo dinamici.

    Mi sembra estremamente macchinoso, ma se mi suggerite di procedere così lo faccio. Senza esitare e senza pietà. : )

    Ale
  • Re: Qual'è il miglior modo per riordinare i risultati di un processo asincrono?

    1 e 2 stesso tempo.
    Ordine di grandezza di OCR su una pagina (secondi) maggiore tempo ordinamento del più lungo libro scritto al mondo.
    Dunque attendi fine elaborazione ocr e poi fai quello che ti pare col testo
Devi accedere o registrarti per scrivere nel forum
5 risposte