タグ

VC++とWin32に関するbabydaemonsのブックマーク (5)

  • low-fragmentation heap - espresso3389の日記

    会社で開発しているアプリケーションで、プログラムの[閉じる]ボタンを押しても数秒間固まったままになるものがあった。別に、WaitForXXXObject(s)しているわけでもないし、そんなに重い処理をしている訳でもない。理由がわからないまましばらく放置していたのだが、今日になってやっと原因が判明した。たった一つのdeleteに数百ミリ秒のオーダーで時間が消費されていた。別にデストラクタがあるわけでもないクラスのインスタンスでだ。 いろいろと調べたところ、ヒープの断片化が激しいらしい。かといって、断片化を防ぐコードを書くのもなかなか難しい。いくつかのインスタンスには、無理矢理compact()っていう関数を導入してみて、適宜、メモリの再確保によって断片化を押さえるようにしたものの、全体的には、あんまり改善できず。 仕方がないので、ちょっとだけ調べてみると、Windows XP以降では、low

    low-fragmentation heap - espresso3389の日記
  • スレッドの使い方

    戻る 32ビットアプリケーションを作成するための環境が整い,16ビット アプリケーションを新規に作成することは少なくなってきているのではないかと 思われます.16ビットアプリケーションと異なり,32ビットでは完全な (プリエンティブな)マルチスレッド・マルチタスクでプロセスが実行できるように なっています. しかし,最近スレッドの使い方を誤ることによるトラブルをよく見掛け ます.スレッドを使い方を間違えるとシステムのパフォーマンスを低下させたり, システムリソースを不必要に消費させてしまいます.また,各スレッドで共有する システムリソースを,いずれかのスレッドが勝手に破棄したり,スレッドが何かの処理 を行っている途中でプロセスが終了してしまうと何が起こるか分かりません. そこで,基的なスレッドの扱いについてまとめてみたいと思います. 19-1 スレッドとは いまさらスレッドを説明すること

  • メモリリークのメモリ確保場所を特定するには

    解説 1.まとめ Visual C++ 2005 (Visual Studio 2005) を使用した、「メモリリークのメモリ確保場所の特定」に関してまとめます。 より正しくは、Visual C++ 2005 (Visual Studio 2005) の出力ウィンドウに「検出したメモリリークのメモリ確保場所のソースファイル名、行番号をダンプする方法」に関してまとめます。 (「メモリリークを検出するには」も同時に実施する必要があります) 「メモリ確保関数をデバッグバージョンの関数に置き換える定義」をソースファイルの先頭に記述すると、検出したメモリリークのメモリ確保場所のソースファイル名、行番号が出力ウィンドウにダンプされるようになります。 ただし、この方法による「メモリリークのメモリ確保場所を特定」は、デバッグバージョンの場合(プリプロセッサの定義で _DEBUG が定義されている場合)にし

  • WM_USER

    0 ~ (WM_USER - 1) の範囲のメッセージは、システムによって定義されています。この範囲の中で明示的に定義されていない値は今後の拡張のために予約されています。 WM_USER ~ 0x7FFF の範囲のメッセージは、プライベートウィンドウクラスの中でメッセージを送信するのに、アプリケーションが定義して使用することができます。定義済みウィンドウクラスではすでにこの範囲の値を定義しているので、アプリケーション中で重要なメッセージを定義するのにこの範囲の値を使用してはいけません。例えば、ボタンコントロール・エディットコントロール・リストボックス・コンボボックスなどのような定義済みコントロールはこれらの値を使用しています。メッセージを拡張してそのメッセージコードに同じ意味を持たせるようにアプリケーションが設計されていない限りは、このメッセージを他のアプリケーションに送ってはいけません。

    babydaemons
    babydaemons 2017/06/24
    WM_USER + 0x7000から使いますよー。謙虚なので。“WM_USER ~ 0x7FFF プライベートウィンドウクラスが使用するのに使うことのできる整数メッセージです。”
  • 構造化例外処理 ~ 例外情報の取得 - Web/DB プログラミング徹底解説

    例外 (SEH) が発生した際、例外フィルタにて GetExceptionInformation を用いて、その例外の情報を取得することが可能です。 GetExceptionInformation は例外フィルタでしか参照することはできません。 LPEXCEPTION_POINTERS GetExceptionInformation(void); GetExceptionInformation は EXCEPTION_POINTERS へのポインタを返します。 EXCEPTION_POINTERS の定義は次です。 typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

    構造化例外処理 ~ 例外情報の取得 - Web/DB プログラミング徹底解説
  • 1