スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[覚え書き]TryEnterCriticalSection()について

TryEnterCriticalSection()はwindowsのバージョンによって使えたり使えなかったりするみたい。
2000以降なら使えるので
#define _WIN32_WINNT 0x0500
定義して対象の環境が2000以降であることを明示的に示す必要があるようです。
http://msdn.microsoft.com/ja-jp/library/aa383745.aspx


/**************************
TryEnterCriticalSection()が使えるかどうかの確認のためのソースコード
***************************/
#pragma comment(lib,"winmm.lib")
//ここのdefineを忘れるとコンパイルエラーになる
#define _WIN32_WINNT 0x0500
#include
#include
#include


CRITICAL_SECTION critical;


unsigned int __stdcall ThreadFunc(void* p_num )
{
volatile int* num = reinterpret_cast(p_num);

int a =0;
while(*num)
{
// ここのTryEnterCriticalSection()のためにコンパイルエラーが起きる
BOOL flag = TryEnterCriticalSection(&critical);
if(flag ==TRUE)
{
a++;
}
std::cout << a << std::endl;
Sleep(10);
}
std::cout << "end" << std::endl;
_endthreadex(0);
return 0;
}


int main()
{
int num;
uintptr_t thread;
InitializeCriticalSection(&critical);
thread = _beginthreadex( NULL,0,&ThreadFunc,&num,0,0);

::EnterCriticalSection(&critical);
Sleep(1000);
::LeaveCriticalSection(&critical);
Sleep(1000);
num =0;
Sleep(1000);
::DeleteCriticalSection(&critical);

return 0;
}
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

かみさまみならい

Author:かみさまみならい
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。