Autore Topic: How to create a multiple process listener ?  (Letto 578 volte)

Offline ujlain

  • Gamberetto
  • *
  • Post: 2
    • Mostra profilo
How to create a multiple process listener ?
« il: 08 Febbraio 2021, 12:42:03 »
    What I am doing :-
    • I fire multiple instances of an identical command (to convert large MP4 into smaller sized MP4) These processes take different time to execute & terminate.
    • During execution , each process , during its run time outputs multiple progress statements to terminal
    Problem Statement :-
    • Right now , all process render output to single terminal screen
    • I want to capture output of each process and instead show progress process wise on grid layout
    • How do I listen to output of each process ? or how do I create an event based listener for each process ? within this listener , I can write regex code to decipher process and show on grid layout
    Sample skeleton project attached[/list]
    « Ultima modifica: 08 Febbraio 2021, 13:04:28 da ujlain »

    Offline Gianluigi

    • Moderatore globale
    • Senatore Gambero
    • *****
    • Post: 4.243
    • Tonno verde
      • Mostra profilo
    nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

    Offline vuott

    • Moderatore globale
    • Senatore Gambero
    • *****
    • Post: 11.719
    • Ne mors quidem nos iunget
      • Mostra profilo
    Re:How to create a multiple process listener ?
    « Risposta #2 il: 08 Febbraio 2021, 15:37:13 »
    In via generale l'acquisizione (Lettura) di dati "eventuali", provenienti dalla gestione in Gambas di un processo, va effettuata con l'uso dell'Evento " _Read()" della Classe Process.
    Al riguardo suggerirei la lettura di questo breve paragrafo:
        https://www.gambas-it.org/wiki/index.php?title=Lettura_dati_da_un_Processo_e_scrittura_dati_in_un_Processo#Lettura_dati_da_un_Processo

    Nella fattispecie, proposta dal membro ujlain, va consentita la funzionalità di un unico Evento " _Read()" a più processi avviati e gestiti con un array di tipo "Process ".
    Per ottenere ciò, si attribuirà ogni elemento dell'array di tipo "Process" ad un medesimo Gruppo di Eventi tramite il Metodo "Object.Attach()".

    Di seguito, riprendendo parte del codice proposto da ujlain, leggeremo mediante la Classe Process i dati provenienti dai file-device della tastiera e del mouse attraverso un unico Evento " _Read()".
    (Nel mio sistema i file-device attinenti alla tastiera ed al mouse sono: "/dev/input/event4"  e  "/dev/input/event5", e dovranno essere opportunamente e preliminarmente liberati dalla protezione !)

    Codice: [Seleziona]
    Private procId As New Process[2]


    Public Sub bStart_Click()

      procId[0] = Shell "cat /dev/input/event4" For Read
      procId[1] = Shell "cat /dev/input/event5" For Read

      Object.Attach(procId[0], Me, "processo")
      Object.Attach(procId[1], Me, "processo")
       
    End


    Public Sub processo_Read()
     
      Dim b As Byte

      Read #Last, b   ' Legge i dati provenienti da un file-device
     
      If b == 0 Then Return
      Print b
     
    End


    Public Sub bQuit_Click()

      procId[0].Kill
      procId[1].Kill
      Me.Close

    End
    « Ultima modifica: 08 Febbraio 2021, 16:38:33 da vuott »
    « Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

    Offline cogier

    • Gambero
    • **
    • Post: 57
      • Mostra profilo
    Re:How to create a multiple process listener ?
    « Risposta #3 il: 08 Febbraio 2021, 17:46:20 »
    Usare un 'Task', o due, può essere il modo per farlo. Dai un'occhiata al programma allegato che trova tutti i file sul tuo computer in due modi diversi e tiene anche il tempo.

    Using a 'Task', or two may be the way to do this. Have a look at the attached program that finds all the files on your computer in two different ways and keeps time as well.