Evénement pendant une boucle TANTQUE - Delphi/Pascal - Programmation
Marsh Posté le 22-11-2002 à 10:46:27
dans ton while, mets Application.HandleMessage ou Application.ProcessMessages (essaie avec les deux, le premier prend moins de CPU mais va peut-être réagir moins vite)
Mais c'est pas spécialement la manière la plus propre de procéder.
Marsh Posté le 22-11-2002 à 11:01:06
Merci ca ne plante plus, mais ca ne marche toujours pas correctement.
Marsh Posté le 22-11-2002 à 11:06:55
comment ça "pas correctement" ?
Marsh Posté le 22-11-2002 à 11:13:13
Ben ca me fait exactement comme quand je met pas de boucle. j'ai verif 10x le code et pourtant c bien juste.
Marsh Posté le 22-11-2002 à 11:16:41
tu veux dire qu'il n'attend pas ?
Tu as initialisé ta variable à False avant de rentrer dans la boucle ?
Marsh Posté le 22-11-2002 à 11:25:46
si tu mets un breakpoint à l'endroit où tu assignes ta variable à True, il y passe avant de sortir de la boucle ?
Marsh Posté le 26-11-2002 à 08:45:11
je ne comprends pas pourquoi ca ne marche pas, qqun a un moyen plus propre de faire ca ?
Daniel
Marsh Posté le 27-11-2002 à 05:10:07
Si, de pas faire de while et de ne faire ton traitement qu'à la fin de TSend.CommPortDriver1ReceiveData.
Sinon, c'est un peu bourrin ton histoire de faire une boucle avec un Application.ProcessMessages en attendant que qqchose se passe, ca me fait penser à un mec qui a programmé du non evenementiel et qui essaie de commencer Delphi, je me trompe?
Faut réfléchir autrement, tu dois réagir à un évènement, pas attendre qu'il se produise, c'est totalement différent.
Sinon si tu t'obstines dans ton truc, t'es sur que tu recois qqchose?
Marsh Posté le 22-11-2002 à 10:43:26
Hello,
Donc j'ai ma boucle tantque, et j'aimerais attendre jusqu'à ce que l'événement CommPortDriver1ReceiveData s'execute.
Mais ca ne marche pas, si je met cela, le programme tourne sur lui meme a l'infini. Pourtant lorsque CommPortDriver1ReceiveData s'execute, il devrait mettre FlagRcv à 1 et la boucle TANTQUE devrait sortir.
Alors si qqun sait comment faire
Merci
Daniel
1.
Begin
While FlagRcv = False Do Begin
End;
FlagRcv := False;
End;
2.
procedure TSend.CommPortDriver1ReceiveData(Sender: TObject;
DataPtr: Pointer; DataSize: Integer);
var ....
....
begin
...
...
...
FlagRcv := True;
end;