1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| Initialisations:
TList *signetsWord=new TList();
threadsignetsWord=new TThreadList();
threadsignetsWord->Add(signetsWord);
signetsWord=threadsignetsWord->LockList();
TfImprime *fImprime=new TfImprime(Screen->Forms[0]);
fImprime->Threaded=true;
fImprime->typeModele=typeModele;
fImprime->statut_bonlabo=statut_bonlabo;
fImprime->statut_dialyse=statut_dialyse;
fImprime->ShowModal();
Lancement du thread à partir de la fenêtre fImprime :
void __fastcall TfImprime::btAnnuleClick(TObject *Sender)
{
Suspended=true;
btAnnule->Enabled=false;
if (Threaded)
ThreadImp->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::Termine(TObject *Sender) {
delete ThreadImp;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::Timer1Timer(TObject *Sender)
{
Timer1->Enabled=false;
if (Threaded) {
ThreadImp=new TThreadExe(true);
ThreadImp->typeModele=typeModele;
ThreadImp->statut_bonlabo=statut_bonlabo;
ThreadImp->statut_dialyse=statut_dialyse;
ThreadImp->Priority=tpNormal;
ThreadImp->FreeOnTerminate=false;
ThreadImp->OnTerminate=Termine;
ThreadImp->Resume();
}
}
//---------------------------------------------------------------------------
void __fastcall TfImprime::FormShow(TObject *Sender)
{
Timer1->Enabled=true; // oui le timer n'est pas utile....
}
//---------------------------------------------------------------------------
Voici la classe TThread :
//---------------------------------------------------------------------------
__fastcall TThreadExe::TThreadExe (bool CreateSuspended):TThread(CreateSuspended){
}
//---------------------------------------------------------------------------
void __fastcall TThreadExe::Execute(){
CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
Lance();
CoUninitialize();
}
//---------------------------------------------------------------------------
void __fastcall TThreadExe::Lance(void) {
TSignet::Word->printBoucle(typeModele,statut_bonlabo,statut_dialyse);
}
//---------------------------------------------------------------------------
Le code de recherche des signets :
for(int i=0; i<signetsWord->Count; i++){
unSignet=(TSignet *)signetsWord->Items[i];
....<suite du code>... |
Partager