mcrblog

vcpp-ml

2003年02月

28

[vcpp 00060375] SendMessageTimeout()におけるブロッキング

こんにちわ、蓑島です。
久しぶりに投稿します。

現在MFCを使用してマルチスレッドプログラムを作っています。
メインスレッドで作成したサブスレッド内から、メインスレッド内
のウィンドウに対し以下のようにメッセージを送っています。

  SendMessageTimeout(hwnd, msg, wParam, lParam, SMTO_BLOCK, 1000, &result);

呼び出し側のサブスレッドではブロッキングしたいので SMTO_BLOCK フラッグを
指定しています。

[現象その1]
Windows98SE 上でこの呼び出しを行うと、ブロッキングされることなくすぐに
制御がサブスレッド側に戻ってしまいます。この時の関数の戻り値は 0、
GetLastError() の戻り値も 0 で、MSDNライブラリによるとタイムアウトという
結果らしいのですが、実際にはメインスレッド側のメッセージハンドラは呼び出
されており、非同期に実行しています。

[現象その2]
上記関数には SMTO_NOTIMEOUTIFNOTHUNG というフラッグがあり、この値も同時
に指示すると Windows98SE でもうまくブロッキングされます。
ただし、このフラッグは Microsoft MSDN のページにおいて 'Windows 2000:'
という注記が入っています。

[質問]
現状では SMTO_NOTIMEOUTIFNOTHUNG も指定しないと正常に動作しません。
(そう見えているだけかもしれませんが。)
これらについて何かご存知の方がお見えになりましたらご教授願います。

開発環境:VC++6.0 SP5
-- 
株式会社クランプル 開発部
蓑島 幸治 <m...@crumple.co.jp>
28

[vcpp 00060375] SendMessageTimeout()におけるブロッキング

こんにちわ、蓑島です。
久しぶりに投稿します。

現在MFCを使用してマルチスレッドプログラムを作っています。
メインスレッドで作成したサブスレッド内から、メインスレッド内
のウィンドウに対し以下のようにメッセージを送っています。

  SendMessageTimeout(hwnd, msg, wParam, lParam, SMTO_BLOCK, 1000, &result);

呼び出し側のサブスレッドではブロッキングしたいので SMTO_BLOCK フラッグを
指定しています。

[現象その1]
Windows98SE 上でこの呼び出しを行うと、ブロッキングされることなくすぐに
制御がサブスレッド側に戻ってしまいます。この時の関数の戻り値は 0、
GetLastError() の戻り値も 0 で、MSDNライブラリによるとタイムアウトという
結果らしいのですが、実際にはメインスレッド側のメッセージハンドラは呼び出
されており、非同期に実行しています。

[現象その2]
上記関数には SMTO_NOTIMEOUTIFNOTHUNG というフラッグがあり、この値も同時
に指示すると Windows98SE でもうまくブロッキングされます。
ただし、このフラッグは Microsoft MSDN のページにおいて 'Windows 2000:'
という注記が入っています。

[質問]
現状では SMTO_NOTIMEOUTIFNOTHUNG も指定しないと正常に動作しません。
(そう見えているだけかもしれませんが。)
これらについて何かご存知の方がお見えになりましたらご教授願います。

開発環境:VC++6.0 SP5
-- 
株式会社クランプル 開発部
蓑島 幸治 <m...@crumple.co.jp>
26

[vcpp 00060374] Date: Wed, 26 Feb 2003 13:44:35 +0900


お世話になっております。  藤沢です。


C++でADOを使用すると決まって
「warning C4146: 符号付きの値を代入する変数は、
符号付き型にキャストしなければなりません。」
と警告されるのですが、具体的にどうキャストしてやればよろ
しいのでしょうか???
警告をクリックすると以下の「→」の場所に飛びます。

enum RecordCreateOptionsEnum
{
    adCreateCollection = 8192,
    →adCreateStructDoc = -2147483648,
    adCreateNonCollection = 0,
    adOpenIfExists = 33554432,
    adCreateOverwrite = 67108864,
    adFailIfNotExists = -1
};

adCreateStructDoc = -2147483648,
↑に符号がついているんでおこられていると思うのですが、
キャストの方法をご存知の方おられましたら御教授願います。
26

[vcpp 00060374] Date: Wed, 26 Feb 2003 13:44:35 +0900


お世話になっております。  藤沢です。


C++でADOを使用すると決まって
「warning C4146: 符号付きの値を代入する変数は、
符号付き型にキャストしなければなりません。」
と警告されるのですが、具体的にどうキャストしてやればよろ
しいのでしょうか???
警告をクリックすると以下の「→」の場所に飛びます。

enum RecordCreateOptionsEnum
{
    adCreateCollection = 8192,
    →adCreateStructDoc = -2147483648,
    adCreateNonCollection = 0,
    adOpenIfExists = 33554432,
    adCreateOverwrite = 67108864,
    adFailIfNotExists = -1
};

adCreateStructDoc = -2147483648,
↑に符号がついているんでおこられていると思うのですが、
キャストの方法をご存知の方おられましたら御教授願います。
25

[vcpp 00060373] Re: JPEGファイルのサムネイル作成

たけしです。

> ただ、チョット気になるのですが、
> gdiplus.dllのライセンスについて・・・

ここにフリーの「DIB Library」があります。
http://ex.sakura.ne.jp/~mizno/program/diblib.html

機能としては、以下のものが利用できます。
・DIBの管理、表示
・色深度、画像サイズ、明るさの変更
・スクロール
・ファイル入出力(入出力ともBMP,PPM,PGM,TGA,PNG,JPEG,IFF,TIMに対応)
・各種エフェクト

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
大西武
http://www.cyberdelia.net/
mailto:t...@cyberdelia.net
記事検索
Amazon.co.jp
  • ライブドアブログ