Потоки(tthread)

  • Автор темы dr.SeM
  • Дата начала
D

dr.SeM

#1
Здраствуйте. У меня возникла следующая проблема:создаю три потока, где третий должен запуститься после окочания роботы одного из двух (наважно какой, для етого использую функцию WaitFor по примеру из книги). вот тут и проблема, Билдер выдаёт ошыбку "неверный дискриптор", понятно, что ето через WaitFor. Как можно исправить ошыбку?
главный класс(форма)
Код:
TForm1 *Form1;
mynP1 *thr_1;//поток 1
mynP2 *thr_2;//поток 2
myP3 *thr_3;//поток 3
void __fastcall TForm1::btnStartThreadsClick(TObject *Sender)
{
thr_1=new mynP1(true); 
thr_2=new mynP2(true);
thr_3=new myP3(true);
//thr_1->Priority=tpIdle;
//thr_2->Priority=tpIdle;
thr_1->FreeOnTerminate=true;
thr_2->FreeOnTerminate=true;
thr_3->FreeOnTerminate=true;
switch(RadioGroup1->ItemIndex)
{
case 0:{thr_1->Priority=tpIdle;thr_2->Priority=tpIdle;}break;
case 1:{thr_1->Priority=tpHigher;thr_2->Priority=tpHigher;}break;
case 2:{thr_1->Priority=tpHighest;thr_2->Priority=tpHighest;}break;
default : {thr_1->Priority=tpNormal;thr_2->Priority=tpNormal;}break;
}
thr_1->Resume();
thr_2->Resume();
thr_3->Resume();
}
поток 3:
Код:
extern mynP2 *thr_2;
void __fastcall myP3::Execute()
{
//---- Place thread code here ----
thr_2->WaitFor();//ожыдаем его завершения потока
summ3=0;
for(int i=0;i<=10000;i++)
{
//Application->ProcessMessages();
//Form1->ProgressBar1->Position=i;
summ3+=i-sin(i*M_PI/180);
}
Form1->Memo1->Lines->Add("P3:"+ FloatToStr(summ3));
}
Второй поток похож на третий но без extern обьявлеия