会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

PR

Calendar

Category

カテゴリ未分類

(0)

卓球

(1195)

盆太鼓・盆踊り

(407)

トイドローン

(21)

その他

(334)

■■■■■■↓以下は凍結カテゴリー↓■■■■■■

(0)

KATS(自動売買プログラム)

(87)

「VB.NETで自動売買」入門

(24)

本日の取引

(1292)

デイトレ結果(勝ち)

(365)

デイトレ結果(負け)

(591)

夜間取引結果

(15)

今週の取引

(480)

今月の取引

(103)

明日の監視銘柄

(54)

株関連

(55)

草野球

(36)

Keyword Search

▼キーワード検索

Comments

accelwin@ Re[4]:【卓球】シェイクのラケット反転について(11/23) KNIGHTさんへ ご返信ありがとうございます…
KNIGHT@ Re[1]:【卓球】シェイクのラケット反転について(11/23) accelwinさんへ ブログへのコメント、どう…
accelwin@ Re:【卓球】シェイクのラケット反転について(11/23) 61歳でカットマンに挑戦し、2カ月目に突…
KNIGHT@ Re[1]:単身赴任を終え兵庫に戻ります(06/28) Tomohiro Takahashiさんへ コメント有難う…
Tomohiro Takahashi@ Re:単身赴任を終え兵庫に戻ります(06/28) お疲れ様でした。そのうち、私も頑張って…
KNIGHT@ Re[1]:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) fukufuku1789さんへ いえいえ。むしろ私が…
fukufuku1789 @ Re:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) 一緒に試合に出てくださりありがとうござ…
KNIGHT@ Re[1]:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) fukufuku1789さんへ お疲れ様でした。今回…
fukufuku1789 @ Re:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) 惜しい試合が多かったですね。 また卓球し…
KNIGHT@ Re[3]:2023年度台東区オープン年代別後期団体戦(12/10) マニャさんへ コメントどうも有難うござい…
May 25, 2008
XML
この「VB.NETで楽天RSSから~」シリーズがこの記事で10回目を迎えました。


さて今回は、いよいよ複数銘柄の複数項目について更新通知を受けて処理をする
ChangeValue()メソッドの実装を行います。
「何を言ってるの?」と思われた方は<その9>までをご覧下さい。

ChangeValue()メソッドの定義だけは終わっています。中身が空ですが。
では中にコードを追加していきます。

このメソッドに紐付けたイベントハンドラは、エリアリンク(8914.T)、
サイバーファーム(2377.OJ)、YOZAN(6830.Q)の3銘柄について監視している項目に

監視している項目はそれぞれ、現在値と出来高でした。

まずはChangeValue()メソッド中で、どの銘柄についての変更通知か判断する
必要があります。
それを知るには、引数である 「sender」 を使用します。
senderとはイベント通知を行ったオブジェクトそのものの事です。
つまり、監視している3銘柄いずれかのDDEクライアントのインスタンスという事に
なります。
ちょっと専門用語になるので分からない方はやり方だけ参考にして下さい。
senderをDDEクライアントに変換しますが、それを「キャスト」と呼びます。
イベント通知を行ったDDEクライアントを特定するためにsenderをDdeClientに


Dim client As DdeClient = DirectCast(sender, DdeClient)

これで変数「client」を使って、どの銘柄がこのメソッドを呼び出したのかが
分かります。 「Topic」 というプロパティには「2377.OJ」などが入っています。

どの銘柄の更新通知か特定したら、次はどの項目に変更があったかを知る必要が
あります。今回の場合は現在値か出来高です。
「e」 で分かります。
e(型はDdeAdviseEventArgs)には 「Item」 というプロパティがあり、ここに
項目名が入っています。e.Itemが何であるかを確認すれば良いのです。

肝心の「変更された項目の値」ですが、これは<その8>で解説しています。
引数eのプロパティ「Data」にバイト配列で値を持っているんでしたね。

それでは、これらの情報を元にコーディングします。
今回は画面に表示する準備はせず監視の開始ボタンと終了ボタンしか作ってません。
なので変更通知は「出力」ウィンドウに表示させる事にします。

Console.WriteLine("ABC")

と書けば、出力ウィンドウに「ABC」と表示されます。
「WriteLine()」というメソッドは出力した後改行するという意味なので、
次に同じメソッドを呼び出せば次の行に書かれます。
もし

Console.Write("ABC")

と書いたら出力後改行しないので、2回連続で同じ事を書いても

ABCABC

になります。参考まで。

また、更新された銘柄を特定する時、IF文で条件分岐させても良いのですが
今回は 「Select~Case文」 を使用しています。

こんなコードになりました。

WS000058.JPG

前回まで使っていた「バイト配列を文字列に変換する方法」だと出来高が文字化けして
しまうので、以前 micorosoftさん がコメントしてくれた 「CInt」 を使って変換しています。
この関数を使って変換される方が簡単なので、整数値の項目を変換する時には
利用しましょう。

引き続き停止ボタンのメソッドも実装しましょう。
Form2.VB[デザイン] の監視終了ボタンをダブルクリックします。

処理内容は、DdeClientのインスタンスが入ったlistを元に、全ての
DDEクライアントを破棄してやれば良いです。

この部分に関するコードの解説は、ちゃんとしようと思えばそれなりに長くなるので
ここでは「こんな風になります」に留めます(汗)。興味のある方は勉強してみて下さい。

WS000054.JPG

これで一旦コーディング終了です。
待ち遠しかった方、お待たせしました。では実行してみましょう!!
開始ボタンを押してForm2が開いたら「監視開始」ボタンをクリックしてみて下さい。

出力ウィンドウに何か出てきましたか?(下はあくまでも例です)

WS000059.JPG

何か結果が出てきてます!
もしかしたら6項目が全て出ない方もいらっしゃると思います。
何度かやったらたまに出てこないとか。
それは 「デバッグ実行」しているから だと思います。

出力ウィンドウの表示を消すにはこのボタンを押して下さい。

WS000056.JPG

今回は出力ウィンドウに表示するだけでしたが、実際運用する時には
データベースに書き込んだりする必要が出てくるでしょう。
その時にはChangeValue()メソッドの中身を書き換えてやる必要があります。
またその時、一番厄介な「マルチスレッド処理」を実装する事になります。
ChangeValue()メソッドは複数のスレッドが同時に呼び出して実行しており、
メソッドの書き方によってはそれぞれのスレッドが影響を受けて結果が正しく
ならない可能性が出てきたり、間違った対処により処理が遅延したり最悪は
プログラムが負荷増大により固まったりする事があります。

この部分についてどこまで解説するか(出来るか)。悩ましいです。
これで「VB.NETで楽天RSSからリアルタイム情報を取得する」シリーズを終了するか
それともマルチスレッド処理についてもう少しだけ書くか。
明日以降に考えたいと思います。今回はちょっと含みを持たせたまま終了します。





お気に入りの記事を「いいね!」で応援しよう

Last updated  May 26, 2008 08:20:20 AM
コメント(4) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: