Работаю с классом TThread. Создал динамически 5 потоков. (th1 = new TMyThread(true); и.т.д) Каждый поток должен работать с ListView на главной форме. Для проверки каждый поток сначала добавляет строку в ListView с "?", а через 5 сек — в эту же строку ThreadID и индекс строки. В первые четыре строки ThreadID и индекс строки не пишутся, далее нормально, но внизу один "?" болтается. Выглядит так:
? ?
? ?
? ?
? ?
1501 4
988 5 и.т.д
Почему? Нужна ли здесь Критическая секция? Как вообще действовать в этом случае (несколько одинаковых потоков работают с ListView)?
void __fastcall TMyThread::Execute()
{
FreeOnTerminate = true;
for(int i = 0; i < 60; i++)
{
if(Terminated) break;
Synchronize(OnStartCheck);
Sleep(5000);
Synchronize(Result);
}
}
void __fastcall TMyThread::Result()
{
ListView1 = Form1->ListView1;
ListView1->Items->Item[Index]->Caption = IntToStr(ThreadID);
ListView1->Items->Item[Index]->SubItems->Strings[0] = IntToStr(Index);
}
void __fastcall TMyThread::OnStartCheck()
{
ListView1 = Form1->ListView1;
li1 = ListView1->Items->Add(); li1->Caption = "?"; li1->SubItems->Add("?");
Index = li1->Index; //запоминаем индекс созданой строки
}