我知道这听起来可能很奇怪,但是是的,现在是 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;
}
我期望的是全局数组被扩展,第 6 个元素的值为 45.5。
但是从主线程中进行更仔细的调查会给出 Length = 0 和 ArrayOfBounds 异常:
Application->MessageBox(itoa(__X.Length,str , 10), "", MB_OK);
Application->MessageBox(itoa(__X[5],str , 10), "", MB_OK);
谁能告诉我我错过了什么?