|
| Skrive til comport Fra : Jan Larsen |
Dato : 05-12-01 13:38 |
|
Hej
while(!feof(filout))
{
fscanf(filout, "%c", &Ch);
Comm1->Write(&Ch,sizeof(Ch));
ProgressBar1->Position = t;
t = t++;
}
Hvordan undgår jeg at følgende lykke kvæler grafikken " formen det forgår i
bliver først færdigopdateret når min lykke er færdig ???
Jeg brugerC++Builder 5 på win98
| |
Mogens Hansen (05-12-2001)
| Kommentar Fra : Mogens Hansen |
Dato : 05-12-01 19:58 |
|
"Jan Larsen" <jan_l@post12.tele.dk> wrote in message
news:3c0e2ed1$0$81676$edfadb0f@dspool01.news.tele.dk...
> Hej
>
> while(!feof(filout))
> {
> fscanf(filout, "%c", &Ch);
> Comm1->Write(&Ch,sizeof(Ch));
> ProgressBar1->Position = t;
> t = t++;
> }
>
> Hvordan undgår jeg at følgende lykke kvæler grafikken " formen det forgår
i
> bliver først færdigopdateret når min lykke er færdig ???
> Jeg brugerC++Builder 5 på win98
Brugergrænsefladen bliver ikke opdateret, hvis ikke den tråd der har
oprettet vinduerne servicerer message-loopen.
Det betyder at du skal sikre at missage-loopen bliver kørt, mens din din
sende loop bliver udført.
Der er principielt 2 måder:
* Kald message-loopen fra din løkke
* Opret en seperat tråd til at sende til COM-porten, og lav
synkronisering mellem kommunikationstråden og brugergrænseflade tråden.
Den første er den simpleste.
Det sidste er mest kompliceret, men også mest kraftfuldt og generelt.
Da du bruger C++Builder V5, og formodentlig VCL, kan du skrive noget i
retningen af (hvor løkkerne i "StartButtonClick" indikerer et stort arbejde,
og Abort er en bool variabel).
Husk at der bliver generelt åbnet for hele brugergrænsefladen, så de skal
sikre at der ikke bliver startet nye opgaver, som kan konflikte med den
igangværende!
void __fastcall TForm1::StartButtonClick(TObject *Sender)
{
AbortButton->Enabled = true;
StartButton->Enabled = false;
Abort = false;
for(int i = ProgressBar->Min; ProgressBar->Max != i && !Abort; ++i) {
ProgressBar->Position = i;
Application->ProcessMessages(); // Process Pending Messages
for(unsigned j = 0; 100000 != j && !Abort; ++j);
}
AbortButton->Enabled = false;
StartButton->Enabled = true;
}
void __fastcall TForm1::AbortButtonClick(TObject *Sender)
{
Abort = true;
}
Venlig hilsen
Mogens Hansen
| |
Jan Larsen (06-12-2001)
| Kommentar Fra : Jan Larsen |
Dato : 06-12-01 01:58 |
|
Jeg takker mange gang, nu virker det.....
Mvh Jan
Mogens Hansen <mogens_h@dk-online.dk> skrev i en
nyhedsmeddelelse:9ulqjl$2t21$1@news.cybercity.dk...
>
> "Jan Larsen" <jan_l@post12.tele.dk> wrote in message
> news:3c0e2ed1$0$81676$edfadb0f@dspool01.news.tele.dk...
> > Hej
> >
> > while(!feof(filout))
> > {
> > fscanf(filout, "%c", &Ch);
> > Comm1->Write(&Ch,sizeof(Ch));
> > ProgressBar1->Position = t;
> > t = t++;
> > }
> >
> > Hvordan undgår jeg at følgende lykke kvæler grafikken " formen det
forgår
> i
> > bliver først færdigopdateret når min lykke er færdig ???
> > Jeg brugerC++Builder 5 på win98
>
> Brugergrænsefladen bliver ikke opdateret, hvis ikke den tråd der har
> oprettet vinduerne servicerer message-loopen.
> Det betyder at du skal sikre at missage-loopen bliver kørt, mens din din
> sende loop bliver udført.
>
> Der er principielt 2 måder:
> * Kald message-loopen fra din løkke
> * Opret en seperat tråd til at sende til COM-porten, og lav
> synkronisering mellem kommunikationstråden og brugergrænseflade tråden.
>
> Den første er den simpleste.
> Det sidste er mest kompliceret, men også mest kraftfuldt og generelt.
>
> Da du bruger C++Builder V5, og formodentlig VCL, kan du skrive noget i
> retningen af (hvor løkkerne i "StartButtonClick" indikerer et stort
arbejde,
> og Abort er en bool variabel).
> Husk at der bliver generelt åbnet for hele brugergrænsefladen, så de skal
> sikre at der ikke bliver startet nye opgaver, som kan konflikte med den
> igangværende!
>
> void __fastcall TForm1::StartButtonClick(TObject *Sender)
> {
> AbortButton->Enabled = true;
> StartButton->Enabled = false;
> Abort = false;
> for(int i = ProgressBar->Min; ProgressBar->Max != i && !Abort; ++i) {
> ProgressBar->Position = i;
> Application->ProcessMessages(); // Process Pending Messages
> for(unsigned j = 0; 100000 != j && !Abort; ++j);
> }
> AbortButton->Enabled = false;
> StartButton->Enabled = true;
> }
>
> void __fastcall TForm1::AbortButtonClick(TObject *Sender)
> {
> Abort = true;
> }
>
>
> Venlig hilsen
>
> Mogens Hansen
>
>
| |
|
|