TOP 
記事検索(複数ワードSP区切り)
ティアのホームページ☆ミ

 
ティアのホームページ 月依桜へようこそ☆ミ
フルhttps化したので、リンクを張り直してくれると嬉しいです☆

(2024年8月8日更新) ATOM 1.0
女装千年王国 2017年9月29日発売
チャンネル 茉奈香ちゃんねる
 
カテゴリ 自己の紹介 りんく 落書き帳 レガリヤ プログラム みちゃいやん グラフィック RTChart個人用
 
テーマ 日記(825)
たわごと(260)
BlogPet(168)
PSO2(117)
ゲーム(55)
こみけ(45)
PSO2 NGS(35)
番組表(35)
なし(32)
うさこ日記(27)
ココロ日記(20)
Windows10(11)
CG(7)
たるたる(6)
記念日(5)
アニメ(4)
Ys?(4)
あに(2)
拍手返事(2)
激痛(1)
 
旧カテゴリ たわごと
(引っ越し中)
 
カレンダー
<< 2007年06月 >>
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
             
2007年4月 2006年11月
2007年3月 2006年10月
2007年2月 2006年9月
2007年1月 2006年8月
2006年12月 2006年7月
     
 
フォローする?

女装千年王国 2017年9月29日発売
【プリズム◇リコレクション!】情報ページ公開中!
【プリズム◇リコレクション!】情報ページ公開中!
『大図書館の羊飼い』は2013年1月25日発売予定です。
『大図書館の羊飼い』は2013年1月25日発売予定です。

『えれくと!』を応援しています!
「キミとボクとエデンの林檎」花鏡院琴音を応援中☆ 公式サイトへ
ALcot ハニカム 『アネイロ』 瑛菜応援中!
【カミカゼ☆エクスプローラー!】風花を応援中!
【カミカゼ☆エクスプローラー!】沙織を応援中!
アネカノ 秘密の彼女はお姉ちゃんいちゃらぶADV 応援中!
ゴスデリ 7月23日発売予定
『とっぱら ~ざしきわらしのはなし~』2008年9月26日発売予定!
 
no prev page 1/1ページ(1件) no next page
To Close..だから、DDEで迷ってるんだってば 2007年06月23日16時20分
ティアのたわごと☆其の473

DDEは初めていじってるんだけど
今一判らない内容が多い

いろいろと整っていて、メッセージもいろいろ飛んできて・・・
制御しやすいと思っていても、実際の所細かな動作がさっぱり判らない。

そもそも、常時接続していて良いのかどうか・・・・

大体ですね、
XTYP_CONNECTが来てから実際に接続が行われるXTYP_CONNECT_CONFIRMがくるまで・・・・

基本的な初期化は
XTYP_CONNECT
でするにしても、それ以外にも沢山する必要があったりとかで、
今時のマルチコア(デュアルコア)化が進んでいる現状としては、少しでも別々に動かしたい

XTYP_CONNECT自体がOSから呼ばれていると想っているあたしとしては、
アプリケーションのメインスレッドとは別に届くと信じていました。

だから、XTYP_CONNECTが来た後は、適度にフラグをセットして、受け入れ準備を開始させつつも、速攻でリターンしていたわけです。
メインループは一般的なWM_TIMERを使っていたのが悪いのかもしれませんが、それで初期化をする予定でした、

だから、XTYP_CONNECT_CONFIRMでは、逆にWM_TIMERの方での初期化が終了するときにセットするフラグ待ちをしていたわけです。

この短時間の中でどれだけ効率よくスレッドが回されるのかは微妙でしたが、でも、もしかしたら、プロセス間処理の合間に終了しているかもと思いました。

しかし違ったんです。

なんとですね、WM_TIMERは1個も来なかったのです。

なんだかロックしてるよな〜 って感じに今まで動いていたアプリケーションがすぱっと停まったのが第一印象でしたが、

ブレークをセットして、しばらく到着を待ったのですが、結局来ず

見た感じから言うと、DDE最中は他のメッセージは来ない


わざわざ初期化処理をウインドウループに持って行った意味ナッシング。

しかも結構いろいろと順番に動作するように同期制御を入れたから、元に戻すのも大混乱です。


で、はっきり言いましょう、
同じ様な命令が多くて判りません。

例えば、DdeAccessData
これを実行すると、指定したDDEのデータの場所が帰るので、ある程度条件があるとは言え、読み書きが可能になります。
まぁいわばダイレクトアクセス?

それに対して、DdeAddData DdeGetData
指定したddeのデータに読み書きをしてくれる命令、まぁ安全面から考えればこれかな?


でも、DdeAccessDataに「データにアクセスするときはこれを呼び出して下さい」とだけ描いてあり、データアクセス用の関数として、DdeAddDataが紹介されていたら、

DdeAccessDataのあとにDdeAddDataをすると思わない?


後、ずっと気になっているのが advise loop と言われる物

adviseとは忠告するとか、宣告するとか、通知するとか
多分、データを制御する上での、変更しますよ〜から変更終わりましたよ〜
までだと思う

でも、これの始まりと終わりが判らない。

クライアント側からサーバー側のDDEオブジェクトをいじるには
DdeClientTransaction
というメッセージがあって、これを利用することで、スタートから終了までいろいろ出来ます。
では、サーバー側は?
DdeAddData等で、随意にデータの変更が出来る
DdePostAdviseと言う命令もあって、データ変更したら実行してとか行ってるけど
(クライアントにはXTYP_ADVREQが送られるらしい)

じゃ〜、クライアントから、行きたいときにDdeGetDataで読みに行ったり、したら
もしかしたら、変更の最中(実施にメモリを書き込むのではなく、サーバー側でデータの変更が発生してデータを順次書き換えている最中とか)だと、データの整合が全く取れなくなるでしょ?

advise loopってものが物をいいそうなんだけど、結局どうやってそれをスタートさせて終了するのかは、サーバー側が判らないのが問題なのよ
XTYP_ADVSTARTそのものは、クライアント−>サーバーオンリーで
逆向けの制御がどうすればいいのか判らない、
あくまで、XTYP_ADVREQが来るまでは、ノータッチが原則なのかしら?


もうね、何だか結果が分かってきたような感じはするけど、
一度だらだら打ち込まないと、今一整理が付きにくいのよ

まぁいいわ、そろそろちゃんと組み上がると思うから


--------------------------------
追加

あ〜判ったってば

DDEはとてもシンプルにサーバークライアント方式なのね
応答を待つサーバーは、クライアントの接続があると、提供するべき情報を用意し、
クライアントが開始させたadvise loopにて提供するべき情報を書き込み

クライアントは、必要な情報を読み込んだ後に、
advise loopを終了させる。

継続的にデータが必要なら、ループを終了させる必要はないでしょうが、
あくまでクライアントからの要求に応じることしかできない様です。

動作としては、
事前準備
 1.サーバー側がname登録
 2.コネクト待ち
実行時
 3.クライアントから接続要求
 4.サーバー側で、それなりに初期化
 5.クライアント側でadvise loopの開始を宣言
 6.サーバー側で、データを準備
 7.クライアント側で必要なデータを読み込む
 8.必要であれば、それ以外の動作も行う
 9.クライアント側でadvise loopの終了を宣言
10.サーバー側で不要なデータ領域を開放
11.必要であれば再度advise loopを行う
12.クライアント側でddeの切断
終了時
13.サーバー側でname登録の抹消
14.サーバーソフトの終了

こんな感じかな?
いや〜、理解するのに長かったというか、最近の高機能なサーバーからすると、あまりにシンプルすぎて、機能不足が否めないというか、さっぱり理解していなかったというかw
まぁあまり悩みすぎるのは良くない


--------------------------------
追加2

未だ、ちょっと違った、
だいたい合ってるけどね、

6.と7.の間だけど、
サーバーでデータの準備が出来たら、
DdePostAdviseを実行するのよ、
そうすると、サーバー側のコールバックに
XTYP_ADVREQが来るから、データハンドルをリターンでは返すのよ
すると、クライアント側に
XTYP_ADVDATAが届くから、データを処理した後に、
DDE_FACK をリターンとして返す。

で、問題なのはDdePostAdviseを実行してから、XTYP_ADVREQが来るまでの時間

処理が長いとDdePostAdviseを送信したメッセージの処理が終了する前に、
callbackが起動されて(もしかしたら直後かもしれないけどね)、そのままクライアントへメッセージを送ってしまうので、これはこれで大変ですわよ


あ〜、そうそう、DDEがマジでWM_DDEXXXXっていうウインドウメッセージであることが判ったから、callback関数の最中にはWM_TIMERは発生しません。

後、DdePostAdviseを実行して、XTYP_ADVREQが来るのは、両方自スレなので、mutexが無意味orz
別の同期方法っていうか、同期取るとデッドロックするから、別の方法を考えないとね
DdePostAdviseを実行するスレッドは別に用意しようかしらw
閉じる
テーマ:たわごと URL:https://tsukiyori.sakura.ne.jp/index.cgi?ID=54
 
no prev page 1/1ページ(1件) no next page
このホームページでは一部、“PULLTOP” 製品の画像素材を加工・引用しています。
これらの素材を他へ転載することを禁じます。
(C)GUST CO.,LTD.
Copyright © 2009 C&C Media Co.,Ltd. All Rights Reserved.
Copyright ©  WeMade Entertainment Co.,Ltd. All Rights Reserved
Copyright ©  INTIVSOFT. All Rights Reserved.
『PHANTASY STAR ONLINE 2』公式サイト
http://pso2.jp/
■PULLTOP Official Website■ やりこみRPGアトリエシリーズ公式ページへ!
モバイル向けのページはこのQRコードを利用ください。
■PULLTOP Official Website■
 
以前のバナーはこちら パメラ七変化はこちら