Bonjour à toute la communauté,
Voici mon problème je développe un programme avec builder 4 pour la lecture et l'écriture de caractères sur une liaison série. Tout marche nikel avec les méthodes read et write en asynchrone et un thread pour la lecture. Mais voila pour utiliser la trame reçu je voudrais utiliser les WM_USER , j'ai placé le postmessage() dans le thread :
while (!Terminated)
{
FPrinc->port->Recevoir(Chaine[0]);
Chaine[1]='\0';
PostMessage(GetActiveWindow(),WM_USER,Chaine[0],Chaine[1]);
}Créé le BEGIN_MESSAGE_MAP et le END dans le header de mon fichier source principale :
class TFPrinc : public TForm
{
__published:
...
...
private:
MESSAGE void __fastcall HandleUser(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_USER, TMessage ,HandleUser);
END_MESSAGE_MAP(TForm);
public:
__fastcall TFPrinc(TComponent* Owner);
PortSerieWin32 *port;
};
La définition de la méthode HandleUser :
MESSAGE void __fastcall TFPrinc::HandleUser(TMessage &Message)
{
char text[TAILLE_TRAME];
text[0]=Message.LParamLo;
text[1]=Message.WParamLo;
MemoRecep->Lines->Add(text);
}
Et mon problème, ce que en pas à pas je reçoit bien le caractère dans Chaine[0] avec le PostMessage, mais ensuite il se remet de suite en attente d'un nouveau caractère sur la liaison série :
int PortSerieWin32::Recevoir(char& chaine)
{
ReadFile(hPortCom,(LPVOID *) &chaine,TAILLE_TAMPON,&Nlus, &ollecture) ;
GetOverlappedResult( hPortCom, &ollecture, &Nlus, TRUE );//determine l'état de read file(achevé ou encore en cours)
return OK;
}
Sans passer par le HandleUser
Si quelqu'un a une idée...
Je vous remercie.