- Kod: Zaznacz cały
void __fastcall TForm2::Button1Click(TObject *Sender){
int czas = 0, czas1 = 0;
Wyswietl->Caption = "Procesor obciążony przez :"; //nie wyświetla się
Application->ProcessMessages(); //
czas1 = czas = ((GetTickCount()/1000)/60);
czas += 1;
while(czas1 <= czas){ //<-----------PĘTLA
czas1 = ((GetTickCount()/1000)/60);
if(czas == czas1)
Wyswietl_czas->Caption = "mniej niż minutę"; //nie wyświetla się
else
Wyswietl_czas->Caption = "minut"; //nie wyświetla się
Application->ProcessMessages();
};
}
Dokładnie chodzi mi o obciążenie procesora w 100%, a najlepiej posłużyć się pętlą. Wszystko działa poprawnie, ale jak nacinałem guzik to dopóki nie skończyła się pętla cała aplikacja była zawieszona(tylko kill mógł ją wyłączyć).
Poradziłem sobie z tym stosując wątki:
- Kod: Zaznacz cały
void __fastcall TForm2::Button1Click(TObject *Sender){
if((GetCPUCount()-1) == 1)
// inicjalizacja wątku 1
W_ID = BeginThread(NULL, 0, Obciaz1, this, 0, W_PD);
else if((GetCPUCount()-1) == 2){
// inicjalizacja wątku 1
W_ID = BeginThread(NULL, 0, Obciaz1, this, 0, W_PD);
// inicjalizacja wątku 2
W_ID = BeginThread(NULL, 0, Obciaz2, this, 0, W_PD);
}
Wyswietl->Caption = "Wybierz czas testu:";
Edit1->Visible = true;
}
No i pytanie dlaczego tak się stało, iż wyjściem z nie zawieszania aplikacji jest zastosowanie wątku ? Dodam, że wątek zawiera dokładnie to co pierwszy fragment kodu.




