- ベストアンサー
system("cls")について
system("cls")を使うと画面を一旦消去出来るということで使ってみたのですが、これを使うと若干処理がストップしてしまいます。 system("cls")を使わない場合には一瞬で結果を表示してくれますが、system("cls")ではそれは出来ないのでしょうか? 分かりにくい質問かと思いますが、よろしければご回答お願いします。 コンパイラ:BorlandC++ Compiler 開発環境:CPad for Borland C++Compiler OS:Windows XP
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DOS窓の話ですね。 clsはcommand.comの内部コマンドなので呼び出しが遅いしMSDOS標準システムコールを使ってるので実行も遅いわけで。 だからPC98時代は直接VRAMを書き換えてました。 しかし現在はCPUも早いので puts("")を 24回? 呼び出せば速いのでは。 こんな質問に出会ったのは20年ぶりであります。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・ちょっとAPI関数を使って作ってみました。 Windows.h をインクルードできる環境でお使い下さい。(分かりますか?) #include <Windows.h> // 画面消去の定数 #define CLS_SPACE ((WORD)(0x20)) #define CLS_COLOR ((WORD)(0x0F)) // すべての画面消去 void cls( void ) { CONSOLE_SCREEN_BUFFER_INFO csbi = { 0 }; COORD pos = { 0 }; HANDLE hStderr; hStderr = GetStdHandle( STD_ERROR_HANDLE ); GetConsoleScreenBufferInfo( hStderr, &csbi ); SetConsoleCursorPosition( hStderr, pos ); FillConsoleOutputCharacter( hStderr, CLS_SPACE, (csbi.dwSize.X * csbi.dwSize.Y), pos, NULL ); FillConsoleOutputAttribute( hStderr, CLS_COLOR, (csbi.dwSize.X * csbi.dwSize.Y), pos, NULL ); } どうぞ。(インデントは全角空白ですので注意)
お礼
アドバイスありがとうございます。 ちょうどWin32APIの勉強をちょろっとし始めていたので、なんとか理解して動かしてみたところ、しっかり画面の消去が出来ました。 どういった処理なのかはさっぱりですが、APIを勉強していく過程で少しずつ理解していければと思います。
- jacta
- ベストアンサー率26% (845/3158)
clrscr関数を使うというのはどうでしょう?
お礼
アドバイスありがとうございます。 Cpadだと分割コンパイルにmakefileを書かなければならず、面倒そうだったので、最近ちょっとVisualC++を使って書いていたのですが、どうもclrscr関数はVisualC++では動かない(サポートしていない?)ようですね。 ということでBCCDeveloperをダウンロードして試してみると、見事に高速で画面の消去が出来ました!
お礼
アドバイスありがとうございます。 ちょっと最近コンソール上(?)で動くリバーシを作る機会がありまして、それをちょっと作ってからコンソールでもリアルタイム処理を出来る事を知り、コンソールアプリケーションの可能性に目覚めました。 私はDOSの時代を知らず、ウインドウベース(?)のプログラムが当たり前だと思っていた人間ですが、やはりコンソール上でリバーシが動いた時は感動しましたね。