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

解決


Dennis  2008-07-13 02:19:14  No: 68701  IP: 192.*.*.*

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

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

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

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

編集 削除
かもねぎ  2008-07-13 07:01:02  No: 68702  IP: 192.*.*.*

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

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

編集 削除
tetrapod  2008-07-13 07:44:52  No: 68703  IP: 192.*.*.*

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

編集 削除
ぎりぎり  2008-07-13 15:14:09  No: 68704  IP: 192.*.*.*

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

編集 削除
とおり  2008-07-13 19:08:48  No: 68705  IP: 192.*.*.*

>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 03:38:00  No: 68706  IP: 192.*.*.*

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

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

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

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

編集 削除