I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det er i grunden meget simpelt. Du laver bare en thread, og i dennes OnExecute skriver du koden. I dit program allokkerer du thread\'en ved at kalde dens Create, og vupti - har du en nonblocking tcpclient.
Okay. Nonblocking betyder jo bare at vcl-threaden kan fortsætte med at køre, så derfor:
Først creater du threaden (fx ved tryk på en knap). Dit program fortsætter upåvirket af at threaden kører. Der er altså nu to threads i dit program, nemlig vcl-threaden (altså den hvor alt det visuelle i dit program foregår) og den thread du lige har oprettet (som vi vil bruge til at kalde IndyClient.Readln). For hvis du i den threadclass du har oprettet skriver noget som dette:
procedure TMyIndyThread.Execute; var FClient: TIdTCPClient; S: String; i: integer; begin FClient := TIdTCPClient.create(nil); try FClient.Host := \'hej\'; FClient.Connect; for i:=0 to 50 do S := FClient.ReadLn; Synchronize(CallFinished); finally FClient.free; end; end;
procedure TMyIndyThread.CallFinished; begin Form1.FinishedReading; end;
Så vil dit program ikke hænge (være blocking), men fortsætte kørslen efter threaden er created. Når så threaden, som kører bagved det visuelle, er færdig med at reade sine data kalder den via synchronize metoden, inherited fra TThread, en metode/procedure i Form1. Den skal bare implementeres. Værs\'go... En nonblocking TcpClient.
Mit problem er at jeg mangler et OnreadEvent til at læse hvad jeg har i min buffer, problemet er at jeg ikke kender min aTerminator i Readln. Min tråd står jo stille på readln indtil der kommer ATerminator karakter/streng, men jeg har ikke en signifikant ATerminator
Det jeg spørger om er om det er muligt at lave et readfrombuffer kald når der er karraktere i bufferen
undskyld, det står jo også i spørgsmålet... :-) Men Indy\'s tcpclient har jo masser af procedurer til at reade uden at man kender en terminator. ReadStream er genial. Der skal man kun kende størrelsen på bufferen, og den sender komponenten selv med, når den sender dataene. ReadBuffer kan også sagtens bruges. Men hvad vil du? Vil du kun modtage i 5 sekunder og så stoppe, eller kender du det sendte antal bytes? I øvrigt kan man også sætte ReadStream til at læse indtil forbindelsen disconnectes...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.