タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Win32APIとVC++に関するfujiyoshisyoutaのブックマーク (2)

  • スレッドを調べまわって分かったことをメモ - かせいさんとこ

    こうですか?分かりません!>< WIN32のみのお話です。 スレッドって結構実装依存なのね…。 先にまとめ windowsは_beginthreadex推奨(CreateThreadはメモリリークの危険あり) _beginthread、_beginthreadexを呼び出すには、process.h をinclude _beginthreadexに入れられる関数ポインタは、__stdcall か __clrcall __stdcall は static WINAPI 〜 __clrcall は CLR系なので今回は未調査 非staticなメンバメソッド(__thiscall)を呼び出すには、ラッパをかぶせる→staticでないクラスメンバ関数を_beginthreadで実行させる方法。 - かせいさんとこ CreateThread C++では無くCの関数。 そのまま使うとメモリリークを起こす

    スレッドを調べまわって分かったことをメモ - かせいさんとこ
    fujiyoshisyouta
    fujiyoshisyouta 2009/07/30
    マルチスレッド関連の基本的な情報のまとめ。
  • CreateThreadと_beginthreadex - blog

    CreateThreadを使ってはいけない、代わりに_beginthreadexを使いなさい。 という有名な掟がWin32のマルチスレッドの世界にはある。 理由は簡単だ。 マルチスレッドを想定していないCランタイム(CRT)関数は、大域変数を使うことを前提としているからだ。 errno, _doserrno, asctime(), ctime(), localtime(), gmtime(), mktime()などだけでなく、mallocやfreeも当然これに該当する。 C++のnew, deleteもmalloc, freeに依存している。 この問題を回避するために、マルチスレッド版のCRTでは、大域変数を格納するに必要なメモリ領域をヒープ上に確保して、このポインタをTLSに保存することで、スレッドセーフにしている。 この領域をスレッド終了時に解放するための割り込みを挿入するのが

    fujiyoshisyouta
    fujiyoshisyouta 2009/07/30
    "マルチスレッド版のCRTでは、大域変数を格納するに必要なメモリ領域をヒープ上に確保して、このポインタをTLSに保存することで、スレッドセーフにしている。"
  • 1