VC++にてCにて開発した言語を起動しますが

[戻る]
Akio 2005/04/21(木) 12:06:03
本当に初心者です。周りにはわかる人がいなくて
どうしていいやら困っていますよろしくお願いします。

現在Cで開発され、DOSプロンプト上にて起動するものを新たに
VC++にてフォームを作成し、イベントにて起動、ログをそのフォーム
に表示させるものです。

Cの開発も初めてだった為現在でも手探り状態です。それでもフォームを
作成し、イベントを持たせ、Cのソースは別ファイルとして管理させようと
xxx.cppを別途作成、その中にメンバ関数としてCのソースを置き、
イベントのView.cppとポインタのやり取りをしてフォームへログを出力
させる事に成功しました。  が、

現在そのログの表示にリストボックスを使用しています。
バッチ的に流す処理ですが処理件数が50万件程ある為このまま進めて
いくとまずい気がしてきました。
通常このような処理をするにはどうしたらいいのか困っています。
よろしくおねがいします。

isshi 2005/04/21(木) 12:23:43
>バッチ的に流す処理ですが処理件数が50万件程ある為このまま進めて
>いくとまずい気がしてきました。
具体的に何がまずいのでしょうか?

Akio 2005/04/21(木) 12:56:50
さっそくレスありがとうございます。

簡単にいうとDOSプロンプトではログが流れていきますが
そのログは流しっぱなしといいますかメモリー上にある程度たまったら
それ以前のものは捨てられていくと聞いた事があります。

リストボックスでは当然行として存在するものでしょうから0行目からずっと
残っているものであり途中で破棄させる処理をしない限りメモリーを食べ尽くして
しまうのではと思いました。

50万行を超えるのリストボックスとは可能なのでしょうか?
またログの出力としてリストボックスを使用することは妥当なのでしょうか?

なにか問題があるのではと考えてのことでした。

REE 2005/04/21(木) 13:20:30
>リストボックスでは当然行として存在するものでしょうから0行目からずっと
>残っているものであり途中で破棄させる処理をしない限りメモリーを食べ尽くして
>しまうのではと思いました。

そう思うのであれば、途中で破棄させる処理をすればよいでしょう。


>またログの出力としてリストボックスを使用することは妥当なのでしょうか?

リストボックスの目的は、複数の項目からの選択ですから、適しているとはいえません。
エディットコントロールの方が、適していると思われます。

Akio 2005/04/21(木) 14:09:32
レスありがとうございます。
早速調べて見ようと思いますが、

>エディットコントロールの方が、適していると思われます。

エディットコントロールとは
リッチエディットコントロールのことでしょうか?
それとも
エディットボックスのことでしょうか?

またリストボックスでは常に出力結果を文字列に変換し

Rmylist->InsertString(-1,Rst);
Rmylist->SetCurSel(Rmylist->GetCount()-1);

としてループさせ、最終行に追加、カーソルをセットするように組んでいました。
おっしゃったように当初はメモリ問題の対策としてはある程度の行からまとめて
削除する事を考えていたのですが、上記どちらかのコントロールにて
大量ログの管理を行う場合、どのような方法で対処を行うのか教えてください。

尚ファイルとして保存する必要はないログデータの扱いとなります。

REE 2005/04/21(木) 15:23:48
>エディットコントロールとは
>リッチエディットコントロールのことでしょうか?
>それとも
>エディットボックスのことでしょうか?

はい(エディットコントロールの方が正式な名前だと思いますが・・)
ただ、実際にはどちらでもいいです。
色をつけたいなら、リッチエディットコントロールになるでしょう。

>おっしゃったように当初はメモリ問題の対策としてはある程度の行からまとめて
>削除する事を考えていたのですが、上記どちらかのコントロールにて
>大量ログの管理を行う場合、どのような方法で対処を行うのか教えてください。

どんな場合にどれくらい消すかなどのアルゴリズムの話であれば、
特に決まりはないので、あなたが決めて下さい。

どのメンバ関数で消すかという話であれば、
MSDNなどでメンバ関数を一通り見れば分かると思います。

Akio 2005/04/21(木) 16:58:35
[[解決]]
レスありがとうございます。

エディットコントロールについて調べてみます。
また別の質問でもお世話になるかもしれません。
ありがとうございました。

hiro 2005/05/07(土) 23:51:32
[[解決]]
KING・王さん、WIZ さん、iijimaさん、ありがとうございました。
解決いたしました。

newのあとにCreate、で出来ました。

KING・王さんのご質問ですが、
>ダイアログBの存在意義がよく見えないのですが、
>ダイアログCは、ダイアログBの初期化処理かなにかで、new、Createで作成されるとい
うこと
>でしょうか?
後々なのですが、ダイアログBには通過時のログのようなものを
表示させようと思っています。
ダイアログCはダイアログAの初期化処理で作成しています。

WIZさんご指摘の
    if( bret == TRUE)
に関してですが、
    if (bret != 0)
に変更致しました。
あと、関数名も変更致しました。
以後、気をつけたいと思います。

KING・王さん、WIZ さん、iijimaさん、
本当にありがとうございました。

hiro 2005/05/07(土) 23:54:16
すみません!!
間違えて書き込みしてしまいました。

古いスレッドには追加発言できません。