Mit program fryser?

Tags:    delphi

Hej jeg har et lille problem (håber det er lille) jeg er igang med at lave et program der modtager signal fra COM2 porten.. Men når jeg tjekker om der kommer data på porten fryser programmet og det hele går så langsomt.. Det er nok metoden jeg modtager data på der er forkert men håber der er en der kan hjælpe mig?

Kode:
Fold kodeboks ind/udKode 




4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Du bruger Readfile som er blocking. Dvs. at indtil du modtager noget data vil den thread du kalder fra blive stoppet helt, uden mulighed for at stoppe det fra samme thread.

Lige præcis til com porten plejer man at sætte et lille timeout på læsning og skrivning så man undgår at fryse for lang tid af gangen.

En god typisk brugt konfiguration er:
GetCommTimeouts(ComFile, @tos);
tos.ReadIntervalTimeout := 300;
tos.ReadTotalTimeoutMultiplier := 30;
tos.ReadTotalTimeoutConstant := 30;
tos.WriteTotalTimeoutMultiplier := 30;
tos.WriteTotalTimeoutConstant := 30;
SetCommTimeouts(ComFile, @tos);

Desuden skal du også sikre dig at baud rate og stopbits/startbits er sat korrekt

Læs mere omkring timeouts på MSDN omkring GetCommTimeouts og SetCommTimeouts. Der findes også et trick så du kan returnere med det samme uden at vente overhovedet



Du bruger Readfile som er blocking. Dvs. at indtil du modtager noget data vil den thread du kalder fra blive stoppet helt, uden mulighed for at stoppe det fra samme thread.

Lige præcis til com porten plejer man at sætte et lille timeout på læsning og skrivning så man undgår at fryse for lang tid af gangen.

En god typisk brugt konfiguration er:
GetCommTimeouts(ComFile, @tos);
tos.ReadIntervalTimeout := 300;
tos.ReadTotalTimeoutMultiplier := 30;
tos.ReadTotalTimeoutConstant := 30;
tos.WriteTotalTimeoutMultiplier := 30;
tos.WriteTotalTimeoutConstant := 30;
SetCommTimeouts(ComFile, @tos);

Desuden skal du også sikre dig at baud rate og stopbits/startbits er sat korrekt

Læs mere omkring timeouts på MSDN omkring GetCommTimeouts og SetCommTimeouts. Der findes også et trick så du kan returnere med det samme uden at vente overhovedet


Kan du fortælle mig det triks? Kunne være dejligt..



Fold kodeboks ind/udKode 




Fold kodeboks ind/udKode 


Er du klar over hvor glad jeg er for det?
Mange tak skal du ha! :D



t