Quantcast
Channel: ドナドナされるプログラマのメモ
Browsing all 552 articles
Browse latest View live

Image may be NSFW.
Clik here to view.

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

どのようにマルチスレッド化するかを考え中。考えられる方針は大きく2つ。ファイルを1個開くたびに1スレッド作り、1変換をするたびに1スレッドを作り、1個書き出すたびに1スレッド作る。ブルジョワ方針。物理メディアごとに1スレッド作り、当該メディアで読み書きするファイルはすべてそのスレッドで処理。CPUコアごとに1スレッド作り、当該コアで処理するデータは(略)。けちんぼ方針。2.のほうがかっこいい実装だし...

View Article


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

どういうふうにスレッドの制御をするか考え中。今回のソフトは、タスクごとにスレッドを作ってしまうという富豪方針である。ということは、リソースに見合った数のスレッドが常に走っているようにスレッドを生成し続ければよい。これを実現するには、ワーカースレッドが完了した際には制御クラスに通知する必要がある。通知は、いくつかの方法がある。一つはSendMessage /...

View Article


Image may be NSFW.
Clik here to view.

SendMessage / PostMessageにかかる時間

SendMessageやPostMessageにてメッセージを投げてから受け取るまでにかかる時間を調べてみた。Ryzen3700X @ Windows10 Prof. 1909では、SendMessage: 20us, PostMessage:...

View Article

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

マルチスレッド関連の実装方法に迷いが生じたので、ちょっと考えを整理する。■やりたいことは何かやりたいことはスレッドからスレッドへの通知?いや違う。それは手段であって、目的ではない。やりたいのは、処理Aが終了したあと、その結果を使う処理Bを起動する処理Aが終了したあと、次の同様の処理A'を起動する処理A'、処理Bはリソースが空くまで動作しないである。つまり条件付きで処理を開始したい、ということになる。...

View Article

Image may be NSFW.
Clik here to view.

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

Visual Studioのリソースエディタで、ダイアログのクラスを追加しようとして「クラスの追加」を選び必要事項を入力したら、「クラスが登録されていません」というエラーがでてしまった。クラスが登録されていません直接の原因はわからないが、適切なプロジェクトをスタートアッププロジェクトに設定したら治った。ちなみに、英語環境だと以下のエラーになる。Error HRESULT E_FAIL has...

View Article


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

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

View Article

CEventとCMultiLock::IsLocked

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

View Article

CMultiLockの問題

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

View Article


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

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

View Article


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

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

View Article

Image may be NSFW.
Clik here to view.

スキャナ設定のメモ

Canon DR-M200でモノクロ原稿を読む場合の設定メモ。基本明るさ画像処理画質調整MozJpegGUIの設定 

View Article

Image may be NSFW.
Clik here to view.

リソースエディタがWS_EX_COMPOSITEDを認識しない

とあるリソースをVisual Studio2019で開こうとしたら、error RC2104: undefined keyword or key name: WS_EX_COMPOSITED というエラーが出た。error RC2104: undefined keyword or key name:...

View Article

CArchive::ReadString, CArchive::WriteStringの罠

CArchive::ReadString()とCArchive::WriteString()を使って文字列を読み書きしようとしたら文字化けしてハマったのでメモ。以下のようなコードを書いたら、読み込み時に文字化けした。 void Serialize(CArchive &ar){ TCHAR path[MAX_PATH+1]; if(ar.IsStoring()){  // save  (中略)...

View Article


CDocumentからCViewを取得する一例

今時ドキュメントビューアーキテクチャなんて人は居ないだろうけど、メモ。CDocumentからCViewにメッセージを投げたいときや関数を直接呼び出したいときに困るのが、CViewのアドレス取得方法。特に、自分はCSplitterWndを多用したためCViewが複数あり決め打ち取得ができなずに困ってしまった。そこで以下のような簡単なコードを書いてみた。Example of finding CView...

View Article

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

mozjpegを使った画像変換ソフト、無事Vectorにて公開。www.vector.co.jp そのうち、英語版もどこかで公開予定だけど、どこにしよう?Vectorってどう見ても国内オンリーなのよね。英語ページを作れる気がしない。

View Article


ダイアログバー上のエディットボックスから文字列を取得する方法

ダイアログバー上のエディットボックスから文字列を取得するのにちょっと苦労したのでメモ。問題の背景ダイアログを作る場合、通常はCDialog等を継承した、そのダイアログ固有のクラスを作成する。しかしMicrosoft曰く、CDialogBarは通常固有のクラスを作成しないらしい。これは、ダイアログバーはメインウィンドウの一部で、各コントロールからのメッセージはメインウィンドウのウィンドウプロシージャで...

View Article

CListViewにポップアップメニューを追加したけどON_UPDATE_COMMAND_UIが送られてこない件について

事象CListViewにポップアップメニューを追加し、条件に応じてメニューのEnable/Disableを切り替えようとMFCの流儀に則りON_UPDATE_COMMAND_UIのハンドラを追加した。しかし、ポップアップメニュー表示時になぜかON_UPDATE_COMMAND_UIが来ない。原因CListViewは、ON_UPDATE_COMMAND_UIの送信に必要なOnInitMenuPopup...

View Article


重いイベントハンドラの処理状況をダイアログで表示する

背景重い処理の進捗状況をダイアログで表示する場合、自分がよくやるのは進捗状況を示すモードレスダイアログを作成重い処理をAfxBeginThread()により別のワーカースレッドとして起動モードレスダイアログは適宜タイマによって状況を更新モードレスダイアログ上のキャンセルボタンが押された場合はフラグを立てる重い処理内では適宜フラグを監視し必要に応じて処理を中断するというもの。たいていはこれで問題なく動...

View Article

Image may be NSFW.
Clik here to view.

ガンダムオンラインのCPU使用率およびGPU使用率

ガンダムオンラインにおけるCPU使用率とGPU使用率をメモ。CPUはRyzen3700X, GPUはGeForce GTX 1070、解像度は1920×1080で画質は最高。全ていずれもCPU使用率20%程度、GPU使用率20%程度。CPU使用率の波形から、相変わらず2スレッドぐらいしか使っておらずマルチコアよりも高クロックの方が快適度の高い設計に見える。ロビー:ガンダムオンライン...

View Article

ガンダムオンラインで回復ビームが他人から見えないことがあるバグ

ガンオンで死体を起こそうと回復ビームを当ててたら、それを遮って修理しろアピールをする人がいた。何故だろうと思ってリプレイを見てみたら、回復ビームが写っていない!そりゃ、死体を起こそうとしているのは分からないし、修理アピールもするわ。以下、リプレイによる検証動画。回復ビームが出ていた証拠に死体は無事復活したし、復帰ポイントも入っている。なので、自分がビームを出していたのは間違いない。しかし、リプレイで...

View Article
Browsing all 552 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>