開発環境:C++ Builder 2009(WinXPPro)


別スレッドから、一定時間毎にフォーム上に配置したTImageの内容を
書き換える処理を行っているのですが、たまに、EOutOfResourcesエラーが発生します。

TImageのハンドルが取得できなくなっているのではないか、と思うのですが、
どのように対処すればいいのかわかりません。

・別スレッドで行っているのは、下記のような内容です。
Graphics::TBitmap bmpBuffer;
//---------------------------------------------------------------------------
void __fastcall thread_proc::Execute()
{
bmpBuffer = new Graphics::TBitmap();
bmpBuffer->HandleType = bmDIB;
bmpBuffer->PixelFormat = pf1bit;
bmpBuffer->SetSize(100, 300);

while(true) {
// bmpBuffer->Canvasを使用した描画処理

Synchronize(&ImgUpdate);

i++;
Sleep(100);
}

delete bmpBuffer;
}
//---------------------------------------------------------------------------
void __fastcall thread_proc::ImgUpdate()
{
Form1->ImgPrev->Picture->Bitmap->Assign(bmpBuffer);
}

わかる方がいらっしゃいましたら、ご教授いただければと思います。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 150 ptで終了
  • 登録:
  • 終了:2009/09/07 17:00:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答7件)

ただいまのポイント : ポイント8 pt / 150 pt ツリー表示 | 新着順
と思うという、想像ではなく tdoi2009/08/31 18:42:24ポイント3pt
まずは、EOutOfResourcesの例外が投げられる場所を特定してはどうですか? 対処法の前に、原因を確定させないと難しいでしょう。
ご回答ありがとうございます。 madapaja2009/09/01 13:47:20
知識不足でEOutOfResources例外が投げられる場所を特定する方法がわかりませんでした。。。 いただいた内容(推測ではなく原因を調査する必要があるという点)はごもっともだと思いますので、 何とか例外がおきている箇 ...
例外なら・・・ tdoi2009/09/01 15:09:46ポイント2pt
Borland提供のAPIは詳しくないので、はずしていたら申し訳ないですが、 あやしいところをtry/catchで囲めばいいのでは? try { bmpBuffer = new Graphics::TBitmap(); } catch (EOutOfResources e) { //エラーメッセージ } これで、エラ ...
CopyRect時にEOutOfResources例外 madapaja2009/09/02 01:43:12
回答ありがとうございます。 try/catchを使って、例外が発生する箇所の特定を試みたところ、   // bmpBuffer->Canvasを使用した描画処理 部分で行っているCopyRectにて、EOutOfResources例外が発生しているようでした。 //該当部 ...
アニメーション? tdoi2009/09/02 17:34:31ポイント1pt
ソースから判断すると、左下に動いていくようなアニメーションを表示したいのですか? 元の描画がどのように行っているのかわからないですが、 CopyRectを呼び出すインスタンスと、CopyRectの第2引数のインスタンスが ...
リソースリーク? cx202009/09/01 00:46:50ポイント2pt
C++ Builder は使ったことはありませんが、以下が原因ではないでしょうか? Windows の仕様で「プロセス毎の GDI オブジェクト数」の制限(Windows 2000/XP の既定値:10,000個)というのがあります。 通常、使用した GDI オブジェ ...
回答ありがとうございます madapaja2009/09/01 13:45:09
いただいた方法を元に、全GDI数を計算した所、2000強でした。 また、作成したアプリケーションのみのGDI数は55程度で、GDI数に引っかかっているようではありませんでした。 引き続き、原因を調査したいと思います。 ご ...

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません