[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/02 12:18 / Filesize : 258 KB / Number-of Response : 992
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.64【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.63【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1231499251/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。


411 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:13:31 ]
>>410
#include <string>

412 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:15:06 ]
>>411
#include <string>はちゃんとしてます

413 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:17:51 ]
>>412
ならイテレータの宣言は済んでる。

何がしたいのかよくわからん。 std::string::const_iterator i; みたいにイテレータ型の
変数を宣言したいってこと?

414 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:19:17 ]
あ、const_iteratorってやるんですね。解決しました。ありがとうございます

415 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:19:30 ]
const stringのイテレータという言い方は無い。
stringのconst_iteratorならstd::string::const_iteratorで宣言できる。

416 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:14:42 ]
newが失敗するのってメモリが足りない時以外にどんな状況が考えられますか?

417 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:27:57 ]
何をnewするかに拠る

418 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:42:35 ]
コンストラクタがエラー投げてることもある

419 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:46:41 ]
そもそもメモリが足りてなくても失敗するとは限らない。



420 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:52:06 ]
STLの出す例外一覧みたいなのってありませんか?

421 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 19:54:38 ]
これ格納すればあらゆる例外投げてくれるよ

struct Hoge{
Hoge(){throw new MyFavoriteException;}
};

422 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 16:14:20 ]
そうかなあ

423 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 02:41:10 ]
VC++でCGIを作ってます(ただの興味本位です
HTMLの文字コードはUTF-8にしたいので、文字列リテラルの文字コードをUTF-8にするために、
ソースコードをUTF-8で保存して、コンパイルしました。
すると「現在のコードページで表示できない文字を含んでます。Unicode形式で保存してください。」という警告が出て、
更に文法エラーが出てきてコンパイルできませんでした。
ソースコードにBOM付けてコンパイルしたら成功しましたが、出力された文字列は何故かShift_JISになってました。(VC++が日本語版だから?
文字列にUTF-8を使うことは不可能なんですか?

424 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 03:11:19 ]
ソースファイルの文字コードとプログラムの出力は別物
ソースはShift_JISでもUTF-8でもコンパイルすれば内容は同じ

で、出力をUTF-8にするためにはプログラムで文字列を組み立ててから
最後にUTF-8に自力で変換してやらなくてはいけない
UTF-8への変換はWin32APIを使う必要がある
たぶんIMultiLanguage2のあたりつかえばできると思うので検索して調べてみてくれ

あと、Shift_JIS以外の文字コードをstdoutに出力するなら、stdoutをバイナリモードに
する必要があるような気がするので、fprintfとかfwriteの前に以下のようなコードが必要かも
setmode( fileno(stdout), O_BINARY );

425 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 04:28:22 ]
2005以降なら、fopenなどでccs=UTF-8を付加すればいいのではと思う

426 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 12:00:07 ]
あー、fopenなんてここ何年も使ってないからすっかり忘れてたわ

427 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:06:36 ]
環境依存しない方法で変換するにはどうすればよかろうの?

428 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:15:48 ]
無理
環境ごとに#ifdefしまくるのが精一杯

429 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:45:03 ]
CGIやるならLinuxだろ
>>425
stdoutには使えないよね



430 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 15:38:25 ]
ソースが Shift_JIS なら、環境に依存してない。

431 名前:デフォルトの名無しさん [2009/03/20(金) 16:55:09 ]
Visual Studioで画面に複数のソースを表示させる方法ってありますか?
Source.cppとSource.hを横に並べて表示したいんですが、、

432 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:01:15 ]
タブを右クリ→垂直タブグループの新規製作

433 名前:デフォルトの名無しさん [2009/03/20(金) 17:04:01 ]
すごい、出来ました!
ありがとうございました。

434 名前:デフォルトの名無しさん [2009/03/20(金) 23:07:02 ]
page4.auctions.yahoo.co.jp/jp/auction/d91264064

435 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:22:55 ]
opendialogを使うと
ShellExeCuteを使いバッチファイルを起動すると
パスが見つからなくなってしまいます。
opendialogを使わない状態でバッチファイルを起動すると大丈夫でした。
何かディレクトリを指定するようなコマンドがあったら教えてください。



436 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:24:00 ]
chdir

437 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:42:32 ]
436>>
バッチファイルのほうで探したら見つかりました
ありがとうございます。

438 名前:デフォルトの名無しさん [2009/03/21(土) 20:56:55 ]
Visual C++の質問なんですが、
新規プロジェクトを作成した後、ソリューションエクスプローラーでフォルダを追加して、そのフォルダの中に
ソースファイルを追加しました。でも実際にはそのフォルダは作られてなくて、プロジェクトのフォルダのトップに
全部のファイルが存在してました。ソリューションエクスプローラーからフォルダを追加しては駄目だったので
しょうか?



439 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 20:59:56 ]
ファイルシステム上のフォルダとは別物だ。



440 名前:デフォルトの名無しさん [2009/03/21(土) 21:03:40 ]
>>439
ええーそうなんですか、、、と思ってもう一回見てみたら追加されるのはフィルタになってました。
じゃあ、プロジェクト内にソースを入れておくフォルダを作るにはどうすればいいですか?
ソースを追加するときに新規フォルダを作っても、ソリューションエクスプローラからは見えません
でした。
フィルタって何の意味があるんだろう。。

441 名前:デフォルトの名無しさん [2009/03/21(土) 21:10:07 ]
自己レスです。
自分なりに考えてみたのですが、ソース追加時に新規フォルダーを作ってそちらにソースを追加した場合、
フィルターもあわせて設定すれば、やりたいことができそうです。
でも途中でフォルダ名を変更しようとすると面倒そうですが、、、。
プロジェクトのトップに全ファイルが置かれるのがいやなのですが、皆さんはどうされてますか?


442 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:21:54 ]
hoge/srcフォルダにソースもヘッダもぶち込む

443 名前:デフォルトの名無しさん [2009/03/21(土) 21:51:18 ]
>>442
ありがとうございます。なんか、そっちのほうがいいのかと思えてきました。
自分のプロジェクト内には、DaemonとCommandという2つのフォルダがあって、それぞれの中に
PrintInfo.cppというのがあるのですが、ビルド時にPrintInfo.objというのが重なってるせいか、
リンクでエラーになります。(LNK2019とかLNK2001とか)
同じ名前のソースが1つのプロジェクト内にあると、フォルダをわけてもよくないのでしょうか?
何度もすいません。



444 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:13:52 ]
image.space.rakuten.co.jp/lg01/91/0000075291/80/img97a425ffzik9zj.jpeg


445 名前:デフォルトの名無しさん [2009/03/21(土) 22:23:20 ]
>>444
浦賀湾のあたり?

解決しました。
出力ファイルのオブジェクトファイル名を変更すればできました。
ただ、両方のPrintInfo.cppに対して、オブジェクトファイル名を手動で指定
しないとだめなのが、分かりにくかった。
片方だけ手動で変更すればいいんじゃないか、、と思ったんですが。
ありがとうございました。


446 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:33:42 ]
>>444

テラナツカシス

447 名前:デフォルトの名無しさん [2009/03/22(日) 13:01:45 ]
昨日VSいれてみました。いきなり分りません。
System::Object^
の^ってなんですか

448 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:12:49 ]
>>447
C++の入門書買ってくるか入門サイトを見て最低限の知識をつけろ

449 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:12:55 ]
検索すればわかることだと思うけれど、
www.google.com/search?hl=en&q=VC%2B%2B+%E3%82%AD%E3%83%A3%E3%83%AC%E3%83%83%E3%83%88&btnG=Search&lr=lang_ja
の3番目



450 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:27:51 ]
C++builderでTreeViewを使っているのですが、子を持つノードだけそのままの位置にして
他のノードのみをソートしたいのですが、alphasortだと全て並び変わってしまい
うまくいきません。

何か良い方法があったら教えてください。

451 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:34:07 ]
C++の入門書には載ってないだろうな。
C++/CLIの入門書嫁。

452 名前:デフォルトの名無しさん [2009/03/22(日) 13:54:28 ]
CLIだったのか。どうりで。
ありがとね。

453 名前:デフォルトの名無しさん [2009/03/22(日) 15:29:42 ]
int hoge(int n) { return n; }
int hoge(const int n) { return n; }
int hoge(int &n) { return n; }
int hoge(const int &n) { return n; }
だと、2番目だけコンパイルできないんですけど、どうしてなんでしょうか。
呼び出すときに、結局intを丸ごとコピーして引数に渡すので、呼び出し元では
int であろうがconst int であろうが区別していないのでしょうか。

454 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 15:41:21 ]
>>453
そう。関数引数の型としてはトップレベルの const は無視され、区別されない。

ただし定義においてはローカル変数への const と同様に働く。

455 名前:デフォルトの名無しさん [2009/03/22(日) 16:58:39 ]
暗号の本で一通りのアルゴリズムのようなものは理解したのですが、
Cに組み込むにはどうすればいいのでしょうか?
アセンブリはやったことがないのですが、Cプログラムを逆アセンブルすると簡単にバレたりしませんか?

たとえば全てのバイトにn加算するという暗号化を施す場合、
その加算するという処理、nという数値が逆アセンブルによって解ると思うのですが、
そうさせないために何か対策する必要はないのでしょうか?

456 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:04:17 ]
アルゴリズムが判明して脆弱になるような暗号は、その時点で脆弱なのです。

457 名前:デフォルトの名無しさん [2009/03/22(日) 17:21:23 ]
例が悪かったですね。
AES等安全性の確立されたアルゴリズムを使うことを前提とします。
ある暗号化されたデータをプログラムで読み込み複合化する場合、プログラムコードに鍵を含める必要がありますよね。
その鍵は逆アセンブル等で簡単に解ったりしないんですか?

458 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:24:55 ]
>>457
分かります

AES暗号化を使っていることが分かるだけでも
どこを調べればいいか分かってしまいます

ある程度以上は諦めるしかないです

459 名前:デフォルトの名無しさん [2009/03/22(日) 18:09:08 ]
MFCでアプリを作っているのですが、
動作確認のため、コンソールも起動しております。
_cprintf_sや_cscanf_s関数を使っているのですが、

_cscanf_s関数でバックスペースのキーを入力すると、
プログラムが無限ループで暴走してしまいます。

普通のscanf()関数のようにバックスペースで一つ前の文字を削除するには
どうすればよいでしょうか?



460 名前:デフォルトの名無しさん [2009/03/22(日) 18:53:39 ]
#include <iostream>
int main(){return 0;}
というプログラムなんですが、プロジェクトを新規作成するときに、
(1)最初から空のプロジェクト
(2)Win32プロジェクトを選択して、空のプロジェクト
という2つの方法でやると、(1)はコンパイルできるのですが、(2)だとコンパイルが
通らず、LNK2019というエラーになります。
この2つの方法って何が違うのでしょうか?



461 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 18:55:39 ]
Win32プロジェクトはGUIプログラム用です

462 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 19:01:50 ]
>>460
プロジェクトのプロパティをよく比較するとわかるが、いくつかの初期設定が異なっている。
そのエラーの元になっている違いはエントリポイントの違い。
Win32プロジェクトでは、main()の代わりにWinMain()という関数からプログラム開始する。

他にもコンソールが表示されるかとかプリプロセッサ定義とか諸々も違う。

463 名前:デフォルトの名無しさん [2009/03/22(日) 19:24:03 ]
>>461-462
ありがとうです。
でもmainをWinMainに書き直しても駄目でした。
>他にもコンソールが表示されるかとかプリプロセッサ定義とか諸々も違う。
本当にほかにも色々違うんですね。


464 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:09:48 ]
#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {return 0}

これが一応の最小プログラムね
Windowsプログラミングでは初めて見る型がたくさん出てくるけど
ほとんどtypedefしただけだから、惑わされずに命名規則と元の型を覚えるといいよ

465 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:15:12 ]
>>464
何のためのtypedefだよ…

466 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:23:08 ]
typedef元の型が変化しても書き直す必要をなくすため

467 名前:デフォルトの名無しさん [2009/03/22(日) 20:26:11 ]
個人的にはAPIENTRYの方が好きだなあ

468 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:28:20 ]
可読性のためだろ

469 名前:デフォルトの名無しさん [2009/03/23(月) 00:16:56 ]
memcpy.asmの
mov [edi],al ;U - write second byte to destination
でエラーが発生してしまいます。なぜでしょうか?

以下 プログラムです。
class ErrorDiffusion{
public:
ErrorDiffusion(int campussize);
~ErrorDiffusion();
void Upperandlowerreversing(int width,int height,unsigned char *Grey);
private:
unsigned char *Output;
};

//上下反転
void ErrorDiffusion::Upperandlowerreversing(int width,int height,unsigned char *Grey)
{
int i,flag=1;

printf("上下反転\n");
for(i=0;i<height;i++)
{ //printf("memcpy mae\n");
memcpy(&OutPut[(height-flag)*width],&Grey[i*width],width);
//printf("%d loop\n",i);
flag++;
}
}
//ここで関数を呼んでいます。
errordiffusion.Upperandlowerreversing(width,height,&Grey[0]);



470 名前:デフォルトの名無しさん [2009/03/23(月) 00:47:52 ]
private:
unsigned char *Output; にして、コンストラクタで、メモリを確保していて
NULLにはなっていないのですが・・。privateへのアクセスは、普通に
Outputでいいはずだとおもうのですが違うのかな?

471 名前:デフォルトの名無しさん [2009/03/23(月) 01:09:47 ]
自己解決しまsちあ

472 名前:デフォルトの名無しさん [2009/03/23(月) 09:55:51 ]
ifstream ifs(filename, ifstream::binary);
Windows環境で、Ifstreamの読みこみで、Ifstream::binaryを書かなかったら
どうしてだめなのでしょうか?

473 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 10:16:20 ]
テキストファイルの読み込みとか、書かなくてもいい場合があるじゃん。

Cの"r" "rb" と同じ関係。

474 名前:デフォルトの名無しさん [2009/03/23(月) 10:58:52 ]
>>473
ありがとうです。テキストファイルの読み込みの場合は書かなくていいんですね。
ついでにあと1個質問させてください。
Ifstream.seekg()で、
Ifstream.seekg(0,ifstream::end)
Ifstream.seekg(ifstream::end)
はどうちがいますか?どっちもコンパイルできるし、意味も同じっぽいんですけど、、、


475 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:02:37 ]
>>474
省略時はどの値を渡したのと同じってのを意識するといい。

476 名前:デフォルトの名無しさん [2009/03/23(月) 11:36:04 ]
>>475
なるほど。
省略時は0を渡したのと同じですね。


477 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:46:00 ]
念のため書くけど、省略時にどの値を採用するかはその関数を書いた人が決めるのよ。
さっきのIfstream::binaryも同じ

478 名前:デフォルトの名無しさん [2009/03/23(月) 12:35:15 ]
>>477
本当ですね。
VC9++で試したら、ゼロじゃなかったです。
どういう値になっているのか調べられなかったけど、
ちゃんと読めてなかったです。


479 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:50:29 ]
ああそうか、binary modeとcooked modeはCP/M、ひいてはMS-DOSの
ためにC言語時代から受け継いでいる伝統だったな

unix系は意識不要



480 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:42:51 ]
おまえFTPとか知らないだろ

481 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:54:43 ]
File Transfer Proturk がどうかなさいましたか?

482 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:09:04 ]
TDateTime now = Date();

String hiduke=DateTimeToStr(now);
SaveDialog1->FileName=hiduke;

日付をFileNameのところに表示したいのですが、上記のようにやっても
うまくいきません原因の分かる方教えてくださいー。

483 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:39:00 ]
482です
解決しました
2009/03/23の
/がダメだったようです。

484 名前:デフォルトの名無しさん [2009/03/23(月) 22:00:05 ]
free(array);
すると、プログラムが止まってしまいます。
メモリは確保しているし、なぜfreeするとエラーになるかわからないです
メモリのエラーはerrorno でチェックしろとかいてあったのですが
どうやってチェックすればいいかサンプルコードをください


485 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:07:14 ]
エスパーさんたのみます!

486 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:13:31 ]
間違えたアドレスを開放しようとしてる

487 名前:高橋 [2009/03/23(月) 22:15:23 ]
>>485
情報がこれだけじゃ、いかに魔美くんでも無理だよ。


488 名前:Cの達人 mailto:sage [2009/03/23(月) 22:27:56 ]
Cの達人と申します。
ネイティブCのことなら、お任せください。

                   by Cの達人

489 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:29:38 ]
www.kouno.jp/home/c_faq/c7.html#19



490 名前:デフォルトの名無しさん [2009/03/23(月) 22:35:46 ]
TCPで他のマシンから要求を受け付けるサーバーを書いてるのですが、過去の一定の時間内(例えば1時間)で処理した
要求の上限を設定(例えば100個まで)して、それ以上は処理しない(要求を受け付けるだけ)ようにしたいと思ってます。
そこで、受け付けた全要求の{受け付けた時間、処理が終わった時間}という構造体を作って、それをダブルリンク
リストにつないで置くようにしました。新しい要求が来たらそのダブルリンクを回って、処理が終わってから1時間
たってないものの数をカウントして、処理する/しないを決めます。

ところがこれだと要求の数が増えると(10万件とか50万件とか)、どんどん重くなるのですが、何か良い方法はない
でしょうか?こういう処理って結構色々な場面で使われると思うのですが。
よろしくお願いします。



491 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:38:48 ]
10万とかのオーダーになったら、DB 使うことを考えちゃうな。

492 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:43:43 ]
>>490
deque を使ってみるといいよ
新しい要求がきたときに

1.一番古い [0] の時刻が1時間より前だったら pop_front で削除
2.1.で削除が行われた場合1.に戻る
3.deque のサイズが 100 未満であれば要求を受け付ける
4.deque に push_back で追加


最近同じような質問があった気がする

493 名前:デフォルトの名無しさん [2009/03/23(月) 22:50:42 ]
>>491
DB使ったほうがいいですかね。
出来るだけ軽い処理で実装しろと言われてて、自分はCで実装してるのですが、、、
上限を過ぎた要求は拒否しちゃえばいいのかな、、。でも拒否された方にいつ
リトライすればいいか教えるのも面倒だし。一応、受け付けた要求の数があまり
多くなりすぎた時には拒否できるようなオプションも付けようかとは思ってます。
リトライのタイミングは相手まかせです。

ありがとうございます。


494 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:56:09 ]
C++には便利な仕組みがいっぱいあるよねー。

495 名前:デフォルトの名無しさん [2009/03/23(月) 22:57:02 ]
>>492
ありがとうございます。
dequeも考えたのですが、処理中の要求がどういう順序で終わるかは決まってないので
(重い要求の少し後に軽いのが来た場合、後から来た軽いのが先に処理が終わる可能性があります)
dequeは使えないか、と思ったんですが、どうですか?

>最近同じような質問があった気がする
ありがとうございます。探してみます。


496 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:23 ]
処理中のものは一時的に別のmapとかに保存しておいて、処理が終了したらlistに積むとか

497 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:26 ]
処理の軽さがあらかじめわかるなら
あの、あれ、なんていったっけ、常にソートされるコンテナ、
それ。

498 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:21:09 ]
時刻をキーにしてstd::set使えばよさげだね
重さ?シラネ

499 名前:デフォルトの名無しさん [2009/03/23(月) 23:35:58 ]
どうも自分の環境だと、30万件を越えたあたりからマシンが応答なくなります。
30万件のダブルリンクを、全然内容に変化がないのに1秒とかの間に何度も何度も
回ってて、何度も何度も処理後1時間以内のエントリの数を数えてます。
この処理を減らせれば、もっといけそうな気がする。
メモリ消費自体は、構造体が16バイトなので、100万件でも16MBとかの消費のはず
なんですがね、、、



500 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:41:11 ]
それは「新しい要求が1秒とかの間に何度も何度も」来てるからじゃろ?
そして「受け付けた全要求」、つまりここでは30万件を
要求が来るたびに「回って、処理が終わってから1時間たってないものの数をカウントして」る
からじゃろ? 仕様どおりじゃないのかな?

501 名前:デフォルトの名無しさん [2009/03/23(月) 23:48:29 ]
>>500
そうですね。
負荷テストやっとこうと思って、別プロセスからガンガン要求なげてみたんです。
1秒間に10000件とかです。負荷が高いときは要求を拒否しますといったほうがいいんですかね。
そうなると、要求を出す側のプログラムも変更しなくちゃいけないのがいやなんですけどね。。



502 名前:デフォルトの名無しさん [2009/03/23(月) 23:52:40 ]
>>497-498
ありがとうございます。
でもC++は手元のコンパイラが対応してなくてですね、、強く要求すれば購入してもらえるかも
しれないんですが、なんとかCでやりたいと思ってます。
自分でstd::setとかコンテナとか実装すればいいのかもしれないですが、
常にソートされるコンテナって重そうな感じがするし、、、、


503 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:53:31 ]
全体的に仕様がおかしい気がするけど
そういう仕様なら仕方ないのであきらめましょう。

プログラマは仕様について意見することはできても
仕様を変える力はありません。しようがないのです。なんちて・・・


コマネチ!

504 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:08:07 ]
>>501
それは仕事でやってるの?

505 名前:デフォルトの名無しさん [2009/03/24(火) 00:11:58 ]
>>501
そうです。でも売り物じゃなくて、社内のデータ管理ソフト用の処理を書かされてます。


506 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:22:25 ]
すげー社内システムだな。

507 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:27:16 ]
>>492の方法なら一番軽いと思うんだけどな。処理が終了してからlistとかdequeに積めばいいだけだし。

全探索の力業を少しでも軽くしたいなら要求が来るたびに調べるんじゃなくて、少しの誤差を許容して
調べるのは一秒に1回までとすれば1/10000まで軽くなると思う。

508 名前:デフォルトの名無しさん [2009/03/24(火) 00:30:19 ]
結構大きな会社で、ストレージ管理ソフトも自社製のがあるんですが、
そういうのは管理できる人を手配するのが大変らしいです、、、


509 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:30:50 ]
STLは偉大だなぁ。ちゃんと処理時間についても言及されてる。



510 名前:デフォルトの名無しさん [2009/03/24(火) 00:40:32 ]
>>507
そうですね。
じゃあ、ダブルリンクには処理が終了してないものを入れておくことにして、終了したものは
dequeで管理する、そしてダブルリンクの全探索は1秒に1回にしてやります。
過去1時間以内に処理した要求の数は、ダブルリンク上の処理中のものの数+deque上のもの。
これで実装してみます。
明日の朝までにできるかな。


511 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:41:40 ]
STLは元々Adaに組み込もうと研究されてたようですね
C++にtemplate機能が付け加えられたのに目を付けた
Stephanov(だっけ)がC++に移植したのが初めだとか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef