ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

2020-02-01から1ヶ月間の記事一覧

mozjpegをつかった画像変換ソフトの開発 その7

mozjpegを使った画像変換ソフト、開発が一段落した。 以下に121個のpngファイルを処理した場合の例を示す。64bit版では約6秒で全ファイルの処理が終わった。 MozJpegGUI 64bit ver. example なお、32bit版と64bit版を作ったが処理速度は以下のように64bit版…

_RPTN, _RPTWN等をTCHARに対応させる

Visual Studioの出力ウィンドウに文字を出力する_RPT系関数は便利だが、なぜかTCHAR版が無い。 (_RPT系関数の参考) donadona.hatenablog.jp 仕方ないので、TCHAR版を作ってみた。なお、毎回_CRT_WARNを書くのが面倒だったので入力不要としている。別のもの…

CMultiLockの問題

Semaphoreの参照カウント数を知るために、カウント数を保持するクラスを作ってみたのだがうまくカウントしてくれない。原因を調べるために、CMultiLockのコードを読んでみたらびっくりした。Unlock()とかはCSyncObjectクラスのUnlock()を呼び出すようになっ…

CEventとCMultiLock::IsLocked

CEventとCMultiLock::IsLocked()の組み合わせでちょっと悩んだのでメモ。 CSemaphoreオブジェクトAのLock待ち中にAbortできるよう、以下のように組んだ。 悩んだのは、IsLocked()。Microsoftのドキュメントでは"Nonzero if the specified object is locked; …

Visual Studioのコード上で32bit用コードと64bit用コードを切り替える

Visual StudioにてC / C++のプログラミングをする際に、32bit向けと64bit向けでコードを変えたくなる場合がある。切り替え自体は当然#ifdefでやるのだが、どの定数で判定するのが良いのだろうか?以下、整理してみた。情報ソースはマイクロソフトの以下記事…

Visual Studioでクラスが登録されていませんというエラーが出る

Visual Studioのリソースエディタで、ダイアログのクラスを追加しようとして「クラスの追加」を選び必要事項を入力したら、「クラスが登録されていません」というエラーがでてしまった。 クラスが登録されていません 直接の原因はわからないが、適切なプロジ…

mozjpegをつかった画像変換ソフトの開発 その6

マルチスレッド関連の実装方法に迷いが生じたので、ちょっと考えを整理する。 ■やりたいことは何か やりたいことはスレッドからスレッドへの通知?いや違う。それは手段であって、目的ではない。やりたいのは、 処理Aが終了したあと、その結果を使う処理Bを…

SendMessage / PostMessageにかかる時間

SendMessageやPostMessageにてメッセージを投げてから受け取るまでにかかる時間を調べてみた。Ryzen3700X @ Windows10 Prof. 1909では、SendMessage: 20us, PostMessage: 34usだった。SendMessageのほうが早いのは、WindowProcedureを速やかに呼ぶかららしい…

mozjpegをつかった画像変換ソフトの開発 その5

どういうふうにスレッドの制御をするか考え中。今回のソフトは、タスクごとにスレッドを作ってしまうという富豪方針である。ということは、リソースに見合った数のスレッドが常に走っているようにスレッドを生成し続ければよい。これを実現するには、ワーカ…

mozjpegをつかった画像変換ソフトの開発 その4

どのようにマルチスレッド化するかを考え中。 考えられる方針は大きく2つ。 ファイルを1個開くたびに1スレッド作り、1変換をするたびに1スレッドを作り、1個書き出すたびに1スレッド作る。ブルジョワ方針。 物理メディアごとに1スレッド作り、当該メディアで…

LibPNGの速度比較(32bit, 64bit)

libPNGについて、win32とx64で速度が違うのか調べてみた。 ■使用環境 OS: Windows10 64bit バージョン1909 CPU:Ryzen 7 3700X 3.6GHz メモリ: PC10700 (1088MHz) ■計測方法 libPNGのRUN_TESTS所要時間を3回計測する。ビルドはいずれもRelease。 ■計測結果 wi…

mozjpegをつかった画像変換ソフトの開発 その3

画像ファイルのロード、変換、保存をする部分の構造はどうしようかなあ。最近のPCはCPUのコア数が多いので、できればマルチスレッド対応としたい。その場合、どういうプログラム構成とすればいいのだろう? データ処理の流れはシンプルだ。 二次記憶からデー…

ツールチップに複数行の文字を表示させる

CToolTipCtrlのAddTool()を使ってツールチップを表示させようとしたときに、文字列が長い場合は指定した位置で改行したくなる・・よね?でも、テキストに\nを加えても改行してくれず、ちょっと苦労したのでメモ。 CToolTipCtrlを使って複数行にわたるテキス…

MFCを使う場合の多言語化

MFCを使う場合の多言語化メモ。以下の英語版より抜粋。 docs.microsoft.com マイクロソフトによると、言語ごとのリソースはリソース専用DLLに格納すればいいらしい。そうすると、以下の順番でリソースの読み込みにチャレンジしてくれる。 GetUserDefaultUILa…

mozjpegをつかった画像変換ソフトの開発 その2

cjpegで設定可能なオプションは色々あるが、互いに排他的なものも結構ある。しかし、どれがそうなのかは明示されていない。そこでcjpeg.cを読んで整理してみた。Groupに番号が振ってあるものは、同じ番号内で相互に影響を及ぼすもの。 Option variables Grou…

mozjpegをつかった画像変換ソフトの開発 その1

mozjpegを使ったwindows用の画像変換ソフトで、以下を満たすものを探したが見つからなかった。 Windows用 GUI 複数の画像ファイルを一括変換 入力ファイルはJPEG, PNG, GIF, BMP マルチスレッドにより複数同時圧縮 無いなら作ればいいじゃん、ということで開…