ここから本文です
ブログを始めました・・・

書庫全体表示

・FM-7→PC(Windows)時のデータ転送を別スレッドにする件
転送するデータ長を先頭で送るようにして成功しました。

・マルチスレッド化した理由
FM-7からPCに転送する際に終了時のタイミングを決定するため

・マルチスレッド化した時の問題点について
(1)生成したスレッドの「Run」メンバーに下ようなfor(;;)があると
GUIの挙動が妖しくなります。(マウスで「×」ボタンを受け付けない)
であれば終了時のタイミングを決定できない。

for (;;) {
    ReadFile(hCommPort, buf, FT245RL_BROCK, &dwRead, NULL);
    if (0 < dwRead)
        fwrite(buf, 1, dwRead, file);    

 
(2)「Run」メンバーの中のfor(;;)を削除し ReadFile だけにすると
FT245RL_BROCK バイトの最初の1回分しか取り込みません。またバッファに
FT245RL_BROCK 以上のデータがないとReadFileに行って戻って来ません。
この辺りがLinuxのドライバと挙動が違います。(コンソールとの違いかも)

それで当初は(2)をベースにPCが受信バッファからデータを取得したら
FM-7にエコーバックしてFM-7から再度送信が可能であることを知らせようと
しましたがPC、FM-7とも無限ループになり、まるでデッドロックのように
身動きができなくなりました。そもそもエコーバックすると通信量が倍に
なるのでスマートな方法ではないと考えていましたが、動かないのなら他を
検討するしかありません。と言うことで紆余曲折はありましたけど

最初の↓でデータ長を計算して for 分で回数を設定することで
ReadFile(hCommPort, buf, FT245RL_BROCK, &dwRead, NULL);

無限ループではない動きになり、終了時のタイミングを決定できました。
for (i; cnt > i ;i++) {


}

因みにスレッドの優先順位は上から2番目にしましたが、この辺りも
更に下げることが出来るか否かを、もう少し確かめてみます。

ではまた。
shuji_akita2001
shuji_akita2001
男性 / O型
人気度
Yahoo!ブログヘルプ - ブログ人気度について
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

最新のコメント最新のコメント

すべて表示

Yahoo!からのお知らせ

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン

みんなの更新記事