[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/29 18:13 / Filesize : 234 KB / Number-of Response : 944
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれ.NET(超初心者向け)



239 名前:デフォルトの名無しさん [2008/01/28(月) 23:56:45 ]
Win32APIまじりの質問になって申しわけありません。

現在C++/CLIを使用して.NETからWin32APIでの非同期IOを行っています。
非同期IOの完了通知にSystem.Threading.Overlappedクラスを使っています。
非同期での書き込みは完了し、待機イベントもシグナルを受信するのですが、
Overlapped.Packメソッドに渡したコールバックデリゲートが呼ばれなくて困っています。

1 Overlappedをインスタンス化する。(hEventは手動リセットイベントオブジェクト asyncはIAsyncResultを実装したクラス
Overlapped ^ overlapped = gcnew Overlapped(0 , 0 , IntPtr(hEvent) , async);
2 Packする。
NativeOverlapped * nativeOverlapped = overlapped->Pack(callback , buffer);
3 非同期IOを行う
WriteFile(hIO ,Marshal::UnsafeAddrOfPinnedArrayElement(buffer,0).ToPointer() , buffer->Length , NULL , (LPOVERLAPPED)nativeOverlapped);

4 完了通知を受け取った(hEventがシグナルを受信)あとにリソースを開放する
Overlapped ^ overlapped = Overlapped::Unpack(nativeOverlapped);
Overlapped::Free(nativeOverlapped);

で間違いありませんよね?
hIOはFILE_FLAG_OVERLAPPEDを設定して開いてあります。

コールバックデリゲートを呼び出すには何か他の操作が必要なのでしょうか?






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<234KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef