he desarrollado una pequeña aplicacion que envia pings para verificar si estan modems en linea.
El problema es que al hacer los pings y y evaluar su estado la aplicacion se congela hasta que termina el ciclo.
Investigué un poco y lei algo de los hilos de ejecución pero no entiendo muy bien.
Espero me ayuden a incluir esta parte del codigo dentro de un hilo para que al menos la ventana se pueda minimizar o cerrar y no se quede "colgada". De antemano muchas gracias.
PD. utilizo una conexion a MySQL y objetos creados en tiempo de ejecucion. El bloque siguiente solo los edita de acuerdo de los pings respondidos.
delphi
For indice2:=1 to (indice) do begin IdIcmpClient1.Host:=''; dyndns:=''; contadorping:=0; estatus:=''; ids:=InttoStr(Datamodule5.ADOQreca.FieldValues['idreca']); IdIcmpClient1.Host:=Datamodule5.ADOQreca.FieldValues['dyndns']; dyndns:=Datamodule5.ADOQreca.FieldValues['dyndns']; nom_reca:=Datamodule5.ADOQreca.FieldValues['nom_reca']; //Inicio de pings For i:=0 to 9 do begin IdIcmpClient1.Ping; if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then begin end else begin contadorping:=contadorping+1; end; end; //Se editan las shapes y etiquetas con el estado if contadorping = 0 then begin Tlabel(listadelabels2[indice2-1]).Caption:=IdIcmpClient1.ReplyStatus.FromIpAddress+#13+'Desconectado'+#13+'Pings '+IntToStr(contadorping); estatus:='Desconectado'; end; if (contadorping>=1) AND (contadorping<=4) then begin Tlabel(listadelabels2[indice2-1]).Caption :=IdIcmpClient1.ReplyStatus.FromIpAddress+#13+'Alerta'+#13+'Pings '+IntToStr(contadorping); estatus:='Alerta'; end; if (contadorping>=5) And (contadorping<=7) then begin Tlabel(listadelabels2[indice2-1]).Caption :=IdIcmpClient1.ReplyStatus.FromIpAddress+#13+'Verificar'+#13+'Pings '+IntToStr(contadorping); estatus:='Verificar'; end; if contadorping>=8 then begin Tlabel(listadelabels2[indice2-1]).Caption :=IdIcmpClient1.ReplyStatus.FromIpAddress+#13+'Conectado'+#13+'Pings '+IntToStr(contadorping); estatus:='Conectado'; end; if contadorping = 0 then begin Tshape(listadeshapes[indice2-1]).Brush.Color:=clRed; end; if (contadorping>=1) AND (contadorping<=4) then begin Tshape(listadeshapes[indice2-1]).Brush.Color:=$001370D7; end; if (contadorping>=5) And (contadorping<=7) then begin Tshape(listadeshapes[indice2-1]).Brush.Color:=clyellow; end; if contadorping>=8 then begin Tshape(listadeshapes[indice2-1]).Brush.Color:=clLime; end; CreateGUID(G); idhexa:=GUIDToString(G); Delete( idhexa,1 ,1 ); Delete( idhexa, 37, 1 ); DataModule5.ADOTconteo.Active:=False; DataModule5.ADOTconteo.Active:=True; DataModule5.ADOTconteo.Open; DataModule5.ADOTconteo.Insert; DataModule5.ADOTconteo.FieldByName('idconteo').AsString:=idhexa; DataModule5.ADOTconteo.FieldByName('nom_reca').AsString:=nom_reca; DataModule5.ADOTconteo.FieldByName('fecha_hora').AsDateTime:=now(); DataModule5.ADOTconteo.FieldByName('pings').AsString:=InttoSTR(contadorping); DataModule5.ADOTconteo.FieldByName('status').AsString:=estatus; DataModule5.ADOTconteo.FieldByName('dyndns').AsString:=dyndns; DataModule5.ADOTconteo.FieldByName('ip').AsString:=IdIcmpClient1.ReplyStatus.FromIpAddress; DataModule5.ADOTconteo.FieldByName('emisora').AsString:=GetPC_Name(); DataModule5.ADOTconteo.Post; {if contadorping=0 then begin Showmessage('No hay conexión con: '+#13+nom_reca+#13+dyndns+DateTimeToStr(now)); end; } Datamodule5.ADOQreca.Next; dyndns:=''; estatus:=''; contadorping:=0;