リアルタイム表示をするには?

解決


Dennis  2008-07-13 11:19:14  No: 68701

電圧値をAD変換器を通してPCに入力し,エディットボックスにリアルタイムで表示しようとしています.

for (i = 1; i < 0; i++){
・データ取得
・データ表示

のように無限ループを作ると,プログラムが止まります.

どのような方法が考えられますでしょうか.
よろしくおねがいします


かもねぎ  2008-07-13 16:01:02  No: 68702

仮に i が int 型なら int max を超えたところでマイナス値になっちゃうかも
そうすると i < 0 が評価されて止まるのかな
そこで代替案

for ( ; ; ) 
{
    // データの取得
    // データの表示
}


tetrapod  2008-07-13 16:44:52  No: 68703

もし本当にこんなコード書いたのならイベントループが回らなくなるので止まって当然
for (;;) { ... } をワーカースレッド化するといいだろう


ぎりぎり  2008-07-14 00:14:09  No: 68704

WM_TIMERを使え…が一番素直な回答なのかな?


とおり  2008-07-14 04:08:48  No: 68705

>for (i = 1; i < 0; i++){
書き間違いだと思いますが
無限ループになって無くないですか?(ループに入らない気が)

暫定で値の確認が目的なら
// データの表示
の後に
UpdateWindow();
いれるとか。ただしボタンとかの操作やウィンドウの移動は
効かなくなるのでtetrapod さんの言うようにスレッド化が
いいのではないでしょうか。

MSG    msg;

if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
}
をループに入れて逃げる方法も・・。(VBで言うDoEventsみたいなもんです)


Dennis  2008-07-15 12:38:00  No: 68706

みなさん返信ありがとうございました.

無限ループに関してですが,どうも怪しいので
while(1){・・}に変更しました.

このwhile(1){・・}をthread化したら,リアルタイム表示ができました.

どうもお世話になりました.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加