Domanda

Un thread separato crea un tidtcpclient e un ttimer. Il TTimer è impostato su 3S e se il TCPClient non è collegato, chiama TCPClient.Connect.
Se non esiste un server a cui connettersi, ciò si traduce nel tentativo di connettersi ogni 3 secondi.

Il thread principale (UI) non fa nulla, ma se afferro la finestra con il mouse e lo muovo lentamente sullo schermo, si blocca ogni 3 secondi per circa 2 secondi, quindi salta in posizione di to-cursor del mouse e segue il mouse Ancora una volta, fino a quando non si verifica il successivo tentativo di connessione.

In altre parole, il thread principale sembra essere bloccato quando TCPClient cerca di connettersi.

Perché ciò accade, anche se il tcpclient è nel suo thread separato?

È stato utile?

Soluzione

Il tuo TTimer funziona ricevendo messaggi WM_TIMER; Tali messaggi vengono spediti utilizzando la pompa del messaggio principale del VCL, nei thread VCL. Dopo i 3 secondi scadono il tuo evento TTimer.ontimer nel thread principale, quindi la chiamata a Connect funziona nel thread VCL principale.

Vieni bloccato perché non stai infilando!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top