アプリ版:「スタンプのみでお礼する」機能のリリースについて

system("cls")を使うと画面を一旦消去出来るということで使ってみたのですが、これを使うと若干処理がストップしてしまいます。
system("cls")を使わない場合には一瞬で結果を表示してくれますが、system("cls")ではそれは出来ないのでしょうか?
分かりにくい質問かと思いますが、よろしければご回答お願いします。

コンパイラ:BorlandC++ Compiler
開発環境:CPad for Borland C++Compiler
OS:Windows XP

A 回答 (3件)

DOS窓の話ですね。


clsはcommand.comの内部コマンドなので呼び出しが遅いしMSDOS標準システムコールを使ってるので実行も遅いわけで。
だからPC98時代は直接VRAMを書き換えてました。
しかし現在はCPUも早いので puts("")を 24回? 呼び出せば速いのでは。
こんな質問に出会ったのは20年ぶりであります。
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。
ちょっと最近コンソール上(?)で動くリバーシを作る機会がありまして、それをちょっと作ってからコンソールでもリアルタイム処理を出来る事を知り、コンソールアプリケーションの可能性に目覚めました。
私はDOSの時代を知らず、ウインドウベース(?)のプログラムが当たり前だと思っていた人間ですが、やはりコンソール上でリバーシが動いた時は感動しましたね。

お礼日時:2008/10/20 00:00

★アドバイス


・ちょっと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 );
}

どうぞ。(インデントは全角空白ですので注意)
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
ちょうどWin32APIの勉強をちょろっとし始めていたので、なんとか理解して動かしてみたところ、しっかり画面の消去が出来ました。
どういった処理なのかはさっぱりですが、APIを勉強していく過程で少しずつ理解していければと思います。

お礼日時:2008/10/20 00:06

clrscr関数を使うというのはどうでしょう?

    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
Cpadだと分割コンパイルにmakefileを書かなければならず、面倒そうだったので、最近ちょっとVisualC++を使って書いていたのですが、どうもclrscr関数はVisualC++では動かない(サポートしていない?)ようですね。
ということでBCCDeveloperをダウンロードして試してみると、見事に高速で画面の消去が出来ました!

お礼日時:2008/10/20 00:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!