ここから本文です

C言語、プログラムを処理しつつ、入力待ちをしたい

izu********さん

2014/1/2920:46:26

C言語、プログラムを処理しつつ、入力待ちをしたい

ということなのですが、具体的言うと、
・for文などで処理をループさせつつ、キーボード入力を常時受け付け、値を読み取ったり、ループから脱したりしたいです。
・常時時間などを表示させつつ、一定の場合に他の処理を行う。
(scanfなどの関数だと、そこで入力待機状態になってしまい、うまく行きません。また、私なりに調べたところ、マルチスレッドなるものがあるそうですが、見てみるとマルチスレッドは、だいぶ特殊な場合のみ使うみたいなのですがどうなのでしょう?)


詳しい方、C初心者ですがよろしくお願い致します・・・
いずれもコマンドプロント上で動作させています。

閲覧数:
2,496
回答数:
4
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

xia********さん

2014/1/2921:00:28

マルチスレッドは特殊ではありません。
学んでみてはいかがですか?
あとはループの中でキーが押されたかどうかを確認する手も。
http://msdn.microsoft.com/ja-jp/library/58w7c94c%28v=vs.90%29.aspx

質問した人からのコメント

2014/2/3 22:44:53

降参 kbhit関数とってもベンリです!!ありがとうございます。ひとつ賢くなれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

uso********さん

2014/1/3009:43:12

人間相手だと凄く遅くても割りと平気
[60FPS≒16.6ms毎に1回位しか相手に
しなくても大丈夫。人間は数十msレベル
でしか反応出来ない生き物]なので、
タイマーでも使えば よいかと。

MS Winだと仮定した話なら、WinAPIの
SetTimer
が使えるかと。使用例は適当に検索のこと。
https://www.google.co.jp/search?q=SetTimer
※ウィンドウハンドルの取得には、
GetConsoleTitle
SetConsoleTitle
FindWindow
などを利用する必要がある とのこと。

ajj********さん

2014/1/2921:58:56

izumo183さん
C言語、プログラムを処理しつつ、入力待ちをしたい
===
マルチスレッドの処理では_beginthread関数等を使います。

スレッドを作らない場合は以下の様にします。

注意
下はkbhitと言う非ANSI関数を利用しています。
殆どのコンパイラで実装していますが使えない場合は、
_beginthread をご利用下さい。
_beginthread の例は、MS社のサイト等でご覧下さい。
http://msdn.microsoft.com/ja-jp/library/kdzttdcb(v=vs.90).aspx

以下は、kbhit利用し、シングルスレッドの例。

#include <stdio.h>
#include <conio.h>

int main (void)
{
unsigned long ll=0;
char mozi[512];

puts("何か文字を入力して下さい");
while(!kbhit()) /* キー入力待ち */
{
ll++;
printf("%lu\r", ll); /* カウンタ */
}
puts("\nループを脱出しました");
scanf("%s", mozi); /*入力文字読み込み*/
printf("\n---\n%s\n---\n", mozi);
return 0;
}

k03********さん

2014/1/2920:52:54

izumo183さん

C言語、プログラムを処理しつつ、入力待ちをしたい

1.
ウインドウのプログラムを書く。

2.
コマンドプロント上で、初心者はたいへん?

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる