|
・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番目にしましたが、この辺りも 更に下げることが出来るか否かを、もう少し確かめてみます。 ではまた。 |

>
- コンピュータとインターネット
>
- コンピュータ
>
- ソフトウェア




