DOBON.NETプログラミング掲示板過去ログ
コールバックメッソドは共有メソッド?
題名: コールバックメッソドは共有メソッド?
著者: ドタばた
日時: 2004/10/05 22:59:27
ID: 6513
この記事の返信元:
(なし)
この記事への返信:
[6525]
Re[1]: コールバックメッソドは共有メソッド?
杉下朋年
2004/10/06 11:38:02
ツリーを表示
環境/言語:[WinXP VB.NET2003]
分類:[.NET]
初心者の質問です。
非同期呼び出しでコールバックされるメッソド(関数)は共有メソッドでしょうか?
それとも、呼び出し元のスレッドで実体化(クラスの as New の様に)されて実行されるのでしょうか?
コールバックメッソドは呼び出し元のスレッドで実行されるとのドキュメントを読んだ記憶がありますが、複数のスレッドで同時にコールバックした時に競合するのかどうかを知りたく思います。
例:
下記の非同期呼び出しを複数のスレッドから同時に起動する。
Socket.BeginReceive(buffer, 0, BufferSize, 0, New AsyncCallback(AddressOf ReceiveCallback), state)
複数のスレッドから下記の同じメッソドをコールバックされる。
Public Sub ReceiveCallback(ByVal ar As IAsyncResult)
このメッソドは競合するのでしょうか?しないのでしょうか?
宜しくお願いします。
題名: Re[1]: コールバックメッソドは共有メソッド?
著者: 杉下朋年
URL:
http://www.mitene.or.jp/~sugisita/
日時: 2004/10/06 11:38:02
ID: 6525
この記事の返信元:
[6513]
コールバックメッソドは共有メソッド?
ドタばた
2004/10/05 22:59:27
この記事への返信:
[6545]
Re[2]: コールバックメッソドは共有メソッド?
ドタばた
2004/10/06 21:22:15
ツリーを表示
デリゲートで指定しているメソッドが共有メソッド(Shared又はモジュール内のメソッド)
ならば競合しますし、インスタンスメソッドを指定すれば各インスタンス固有になります。
題名: Re[2]: コールバックメッソドは共有メソッド?
著者: ドタばた
日時: 2004/10/06 21:22:15
ID: 6545
この記事の返信元:
[6525]
Re[1]: コールバックメッソドは共有メソッド?
杉下朋年
2004/10/06 11:38:02
この記事への返信:
(なし)
ツリーを表示
有難う御座います。
共有・固有は通常のメッソドと同じに考えればいいのですね、有難う御座いました。
先にあげた例ではNew AsyncCallback(AddressOf ReceiveCallback)と新しくインスタンスを作って指定しているので固有に作動する事になりますね。
しかし新しいインスタンスメソッドから更に何気にメソッドを呼び出すと共有問題が発生する事になりエンドレスのLOCK、LOCK、LOCK、に成りそうですね。何かよい方法があればいいのですが。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
初心者の質問です。
非同期呼び出しでコールバックされるメッソド(関数)は共有メソッドでしょうか?
それとも、呼び出し元のスレッドで実体化(クラスの as New の様に)されて実行されるのでしょうか?
コールバックメッソドは呼び出し元のスレッドで実行されるとのドキュメントを読んだ記憶がありますが、複数のスレッドで同時にコールバックした時に競合するのかどうかを知りたく思います。
例:
下記の非同期呼び出しを複数のスレッドから同時に起動する。
Socket.BeginReceive(buffer, 0, BufferSize, 0, New AsyncCallback(AddressOf ReceiveCallback), state)
複数のスレッドから下記の同じメッソドをコールバックされる。
Public Sub ReceiveCallback(ByVal ar As IAsyncResult)
このメッソドは競合するのでしょうか?しないのでしょうか?
宜しくお願いします。