これは奇妙に聞こえるかもしれませんが、はい、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 Exception が返されます。
Application->MessageBox(itoa(__X.Length,str , 10), "", MB_OK);
Application->MessageBox(itoa(__X[5],str , 10), "", MB_OK);
私が見逃したことを誰か教えてもらえますか?