sam291074
![](http://forum.ru-board.com/board/avatars/russia.gif)
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Подскажите, пожалуйста. На главной форме есть cxGrid. Форма порождает поток с вычислениями. Результаты поступают в таблицу вызовом из потока функции, обернутой при вызове в Synchronize потока: Код: void TMainForm::CreateRecordProcessStat(double U, double I, double T, const Seidman& iS) { cxGridProcessStatTableView1->DataController->RecordCount++; vector<int> Ind; Ind.push_back(cxGridProcessStatTableView1->DataController->RecordCount-1); for (int i = 0; i < cxGridProcessStatTableView1->ColumnCount; i++) { Ind.push_back(cxGridProcessStatTableView1->Columns[i]->Index); } TcxCustomDataController *dc = cxGridProcessStatTableView1->DataController; dc->BeginUpdate(); try { dc->Values[Ind[0]][Ind[1]] = CurrToStrF(U,ffGeneral,5); dc->Values[Ind[0]][Ind[2]] = FloatToStrF(I,ffExponent,4,2); dc->Values[Ind[0]][Ind[3]] = CurrToStrF(iS.it_ext, ffGeneral, 5); dc->Values[Ind[0]][Ind[4]] = FloatToStrF(iS.err_int,ffExponent,4,2); dc->Values[Ind[0]][Ind[5]] = FloatToStrF(iS.err_ext_p,ffExponent,4,2); dc->Values[Ind[0]][Ind[6]] = FloatToStrF(iS.err_ext_n,ffExponent,4,2); dc->Values[Ind[0]][Ind[7]] = FloatToStrF(T,ffFixed,4,2); } __finally { if ( cxCheckBoxScrollTable->Checked ) dc->GotoLast(); dc->EndUpdate(); } } | На "медленной" машине все работает нормально, на быстрой - перестает через некоторое время отрисовываться (серый прямоугольник на всей таблице). Спасает только перезапуск программы. Это проблема синхронизации потоков, или ошибки в приведенном коде? Под синхронизацией еще диаграмма TeeChart вместе с этой таблицей - так с ней проблем нет. Отрисовка чарта идет всегда. |