Shell   31-03-2024, 14:39
#1
Buenas!.

Tengo una barra de progreso y me gustaría que a medida que los procesos van finalizando,
se fuese incrementando la barra de progreso.

El problema es que parece que cada cosa va por un lado.
Quiero decir que a lo mejor la barra de progresos ha finalizado ( que ni me he enterado como va aumentando)
y por otro lado se siguen mostrando los directorios en el TextArea. Un descontrol. Confused

Código:
Private hProc As Process
Private adirectorios As New String[]

Private incrementos As Integer

Public Sub Form_Open()

  adirectorios = Dir(User.Home, "*", gb.Directory).Sort()

  incrementos = 1 / adirectorios.Count
  ProgressBar1.Value = 0

End

Public Sub Button1_Click()

  For j As Integer = 0 To adirectorios.Max
    hProc = Shell "ls -l " & adirectorios[j] For Input As "Proceso"
  Next

End

Public Sub Proceso_Read()

  Dim scad As String

  Read #Last, scad, -1024
  TextArea1.Text &= scad

End

Public Sub Proceso_Kill()

  'El progresos de la barra debería aumentar cada vez que acaba un proceso. A cada lectura de un directorio

  Wait 0.1
  incrementos += 1
  ProgressBar1.Value += incrementos

End

Puede que falte un wait, ok, pero puede no ser suficiente. Controlar los procesos no parece fácil.
Adjunto el código fuente.

Saludos
Archivos adjuntos
.gz
ProcesosYBarraDeProgreso-0.0.1.tar.gz (Tamaño: 6.75 KB Descargas: 2)

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   31-03-2024, 16:16
#2
El ejemplo no acaba de estar bien, necesita mejorarse, acabo de darme cuenta de algunos errores. Angel

Acabo de hacer otro parecido, pero solo con un directorio por ahora y esto funciona.

Código:
Private buf As String

Private scad As New String[]

Public Sub Form_Open()

  ProgressBar1.Value = 0

End

Public Sub Button1_Click()

  Dim n As Integer
  Dim incrementos As Float

  Shell "ls -l " & User.Home &/ "Documentos/" To buf
  scad = Split(buf, gb.NewLine)
  scad.Remove(0)
  incrementos = 1 / scad.Count
  For n = 0 To scad.Max
    TextArea1.Text &= scad[n] & gb.NewLine
    Wait 0.1
    ProgressBar1.Value += incrementos
  Next

End

Recordar que la idea no es lo que hace este ejemplo. La idea es, realizar un número de procesos
( sea de lo que sea con un comando externo y controlar la finalización de cada proceso con la barra de progreso)
Última modificación: 31-03-2024, 16:20 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   31-03-2024, 19:08
#3
Yo no soy mucho de resolver problemas teóricos, o sea, que no sé.
Si la intención es coordinar procesos... ten en cuenta que estás leyendo e incrementando en unidades de 1024 bytes. Cuando la barra llegue a 1, aún es posible que queden cosas sin mostrar en el textArea y por eso sigue... creo

Si la intención es listar directorios, mira éste. Más simple.
Archivos adjuntos
.gz
ProcesosYBarraDeProgreso-0.0.2.tar.gz (Tamaño: 11.74 KB Descargas: 1)

No podemos regresar
Shell   31-03-2024, 22:10
#4
(31-03-2024, 19:08)Shordi escribió: Si la intención es coordinar procesos... ten en cuenta que estás leyendo e incrementando en unidades de 1024 bytes. Cuando la barra llegue a 1, aún es posible que queden cosas sin mostrar en el textArea y por eso sigue... creo

Entonces, debería aumentarlo.
Lo que es a la hora de presentarlo en el textArea, se disminuye la instrucción wait y va más fluido.
 
(31-03-2024, 19:08)Shordi escribió: Si la intención es listar directorios, mira éste. Más simple.

No, es solo un ejemplo para realizar procesos uno detrás de otro.
La idea es ejecutar cualquier comando externo. Coincide que lo que uso, si muestra datos por la salida estándar.

¿ Conoces la aplicación  o comando "Whisper" ?. Seguro que le interesa a más de uno. Smile
Convierte el audio, ya sea de un archivo de audio o un vídeo a texto.
En el idioma que le digas. Como no todos los vídeos tienen subtítulos, de ahí el motivo que lo estoy usando,
principalmente para Inglés.

Lo que hago es decirle desde Gambas que archivos quiero convertir y para ver el progreso, uso la barra.
De ahí la pregunta.

Claro, de esto a entender correctamente el uso de los procesos externos en Gambas, ya es otra cosa.

Sé que creaste hace dos años un video tutorial sobre el tema de los procesos, por ahora no
necesito usar sudo.

¿ Para cuando un nuevo video tutorial ?. Big Grin

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   01-04-2024, 01:33
#5
Para esas cosas es más sencillo usar un watch, lanzas tu proceso externo indicando que la salida la genere en un fichero y luego en tu programa vigilas los eventos sobre ese fichero (crear, modificar, eliminar, etc.) y haces lo que quieras con esa salida.

Subí in illo tempore un tutorial sobre esto en youtube:


Fue uno de los primeros videos que hice y es absolutamente horrible. En él , creo recordar, se creaba un fichero de texto en el escritorio y cualquier modificación sobre él se reflejaba en el programa.
El código fuente lo tienes en el foro antiguo
https://foro.gambas-es.org/viewtopic.php?f=10&t=5534

pero te recomiendo ver el vídeo entero, no sólo el código, seguro que encuentras en él la solución a tu problema.

Saludos

No podemos regresar
Shordi   01-04-2024, 07:10
#6
Cita:¿ Para cuando un nuevo video tutorial ?. Big Grin
¿Sobre qué? Tú pide que luego yo ya...

No podemos regresar
Shell   01-04-2024, 16:35
#7
(01-04-2024, 07:10)Shordi escribió: ¿Sobre qué? Tú pide que luego yo ya...

De cocina!.  Smile

Puedes hacer un vídeo sobre algo común que solemos usar en Gambas y te parezca de
interés general para todos los niveles.

Cosas sencillas que puedas explicar en un vídeo no muy largo.

Detalles sueltos, mejoras. Uso de un control que no tengas que hacer de cero.
Lo que te parezca de interés.

Por ejemplo. Oye, que tengo idea de realizar un vídeo sobre estos temas.
¿ Cuál os parece más interesante ?. El problema es saber de que.

¿ La creación de una base de datos ?.  Blush
La creación de una estructura del programa, sus módulos. Posibilidades, que te parece mejor..
Con bases de datos, tienes para rato.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   01-04-2024, 17:10
#8
Cita:De cocina!.  Smile
¿Gambas a la plancha? Suena apropiado... Big Grin Big Grin
Última modificación: 01-04-2024, 17:11 por Shordi.

No podemos regresar
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.