mon application delphi 2009 à thread unique (pas encore terminée) a commencé à avoir un problème avec la suspension de Application.ProcessMessages. mon application a un objet TTimer qui se déclenche toutes les 100 ms pour interroger un périphérique externe. J'utilise Application.ProcessMessages pour mettre à jour l'écran lorsque quelque chose change pour que l'application soit toujours réactive. L'un d'entre eux était dans un événement OnMouseDown de la grille. là-dedans, il y avait un Application.ProcessMessages qui était essentiellement bloqué. enlever ce n'était pas un problème sauf que j'ai bientôt découvert un autre Application.ProcessMessages qui bloquait aussi.Application.ProcessMessages se bloque?
Je pense que ce qui peut m'arriver est que le TTimer est - en mode d'application que je suis en train de déboguer - probablement prendre trop de temps pour terminer. Je l'ai empêché l'événement TTimer.OnTimer clapoteuses de revenir dans le même code (voir ci-dessous):
procedure TfrmMeas.tmrCheckTimer(Sender: TObject);
begin
if m_CheckTimerBusy then
exit;
m_CheckTimerBusy:=true;
try
PollForAndShowMeasurements;
finally
m_CheckTimerBusy:=false;
end;
end;
quels endroits serait-il une mauvaise pratique d'appeler Application.ProcessMessages? On se souvient des routines OnPaint comme quelque chose qui n'aurait pas de sens.
des recommandations générales?
Je suis surpris de voir ce genre de problème surgir à ce stade du développement!
Pourquoi est-ce un CW? Cela me semble être une question assez spécifique et technique. –
@Sertac a raison. Vous n'avez pas besoin de marquer une question en tant que wiki de communauté, sauf si A) vous souhaitez inviter des utilisateurs à faible rep pour éditer votre question, ou B) vous posez une question de sondage très subjective. Il n'y a pas de règle * contre * faire vos questions CW, mais vous et les personnes qui y répondent ne gagneront aucune réputation. –
une raison pour laquelle vous n'envisagez pas d'introduire le filetage dans votre application? –