2005年7月27日水曜日

やっぱりマルチスレッド

昨日、PeekMessageの処理を入れた後、何度か動かしてみたらやっぱりまだ動作が重いです。どこで負荷がかかってるの調べてみたら、ループ内というより、CAtlRegExp.Match() で10秒くらい時間がかかってるらしい。流石にATLの中身までは手を出したくないので、やっぱりマルチスレッド化するしかないのかなぁ?

# 昨日の台風はなんだったんだろう?全然風も強くなかったし。

2005年7月26日火曜日

[Windows, VC++] PeekMessage

昨日の「ATLと正規表現」で、「マルチスレッドにしないと使い物にならないかも。」と書きましたが、もっと簡単な方法があるのをすっかり忘れてました(´・ω・`) 重い処理(この場合、正規表現の処理)をループで回してる最中に、PeekMessageを使ってメッセージ処理をしてあげれば、固まることはないんだった…orz (.NETで言うと、Application.DoEvents)
ってことで、早速入れて試してみると、重いながらも固まることはないです。と言うことで、この問題はこれで終了ダ━o(`・д・´)ノ━!!

2005年7月25日月曜日

[C++] cast

castについてメモ。

dynamic_cast< target-type >( expr ) : ポリモーフィックのポインタの型変換
static_cast< target-type >( expr ) : 非ポリモーフィックのポインタの型変換
const_cast< target-type >( expr ) : const, volatileの指定を上書き(これらを除く変換前後の型は同じである)
reinterpret_cast< target-type >( expr ) : 本質的に互換性の無いポインタ型同士の型変換



ATLと正規表現

プログラミング系の話題をまとめて参照できるように、カテゴリー「プログラミング」を追加しました。今までは「パソコン・インターネット」に書いていたので、ぼちぼち修正していかないと…。

今日の課題はVC++のATLで正規表現を使用し、目的の文字列を取得する、ってこと。VC++7.0からは、標準でCAtlRegExpというクラスが用意されているので、それを使ってみることにしました。

まず、MSDNのサンプルに沿って作ると、全角文字が検索対象に含まれていた場合、ATLのヘッダーの中で例外(;´Д`) どうやら、マルチバイト文字を指定しないとダメらしい。と言うことで、CAtlRECharTraitsMBについて調査中…。

で、一通り調査完了しました。CAtlRECharTraitsMBはCAtlRegExpで使用する文字を指定するクラスのようで、単純に
CAtlRegExp<CAtlRECharTraitsMB> atlRegExp;
で使えました。その後、Parseなどで使用する文字列をreinterpret_cast<const unsigned char*>してやる必要がありますが…。

こんな感じで正規表現は大体終了。実際に動かしてみると…めっちゃ動作が重いヽ(`Д´)ノ これはマルチスレッドにしないと使い物にならないかも。
つД`)・゚・。・゚゚・*:.。..。.:*・゚

2005年7月16日土曜日

MSXMLと格闘中

MSXMLを使って、XMLファイルの読み書きをする方法を調査中。MSXMLそれ自体はそんなに難しくないんだけど、VC++でそれを使えるようにする準備がめんどくさい(;´Д`)コンパイルエラーとか大量に出るし。早く使えるようにしなければ…(´・ω・`)