Я знаю, это может звучать странно, но да, это 2009 год, и мне нужно написать небольшое приложение с использованием BCB5 :)
Проблема в том, что DynamicArray выдает исключение OutOfBound при попытке развернуть его из рабочего потока.
У меня есть глобальная переменная, скажем,
DynamicArray<double> X;
В основном потоке я проверяю длину массива и получаю 0, что нормально (длина не установлена)
Application->MessageBox(itoa(X.Length,str , 10), "", MB_OK);
Ниже приведен класс моего рабочего потока
class ArrayModifierThread : public TThread
{
private:
DynamicArray<double> __thread X;
protected:
void __fastcall Execute();
public:
__fastcall ArrayModifierThread(bool CreateSuspended);
void setX(DynamicArray<double> &a);
};
Пока все хорошо. Далее я создаю новую тему:
ArrayModifierThread *t = new ArrayModifierThread(true);
t->setX(X); // Pass reference to my global DynamicArray
t->Resume();
Здесь выполняется метод Execute ():
void __fastcall ArrayModifierThread::Execute()
{
X.Length = 10;
X[5] = 45.5;
}
Я ожидаю, что глобальный массив будет расширен, а шестой элемент получит значение 45,5.
Но более тщательное исследование из основного потока дает длину = 0 и исключение ArrayOfBounds:
Application->MessageBox(itoa(__X.Length,str , 10), "", MB_OK);
Application->MessageBox(itoa(__X[5],str , 10), "", MB_OK);
Может кто-нибудь сказать мне, что я пропустил?