/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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
>
>





Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste