Win32API質問箱 Build86at TECH
Win32API質問箱 Build86 - 暇つぶし2ch676:デフォルトの名無しさん
10/03/14 14:43:20
演奏してる曲と同期してアニメーションさせるって話なら少し面倒。

677:デフォルトの名無しさん
10/03/14 14:46:58
タイミング固定とかならそれほどでもないだろうけどね。

678:デフォルトの名無しさん
10/03/14 14:47:55
歌詞ファイルみたいなフォーマットを決めてやるとか

679:デフォルトの名無しさん
10/03/14 20:10:24
マルチコア環境でプロセス毎のCPU使用率を正しく取得するにはどうすればよいのでしょう?

PdhGetFormattedCounterValueで取得してみたところ、取得できるCPU使用率は
タスクマネージャで確認できるCPU使用率の2倍になっています(2コアだから?)。
ということは取得できるCPU使用率の最大値は200となるはずと思っていたのですが
何故か100までしか取得できませんでした。(100以上は100として取得できる模様)

ちなみにWindows付属のパフォーマンスモニターで確認してみると、こちらも
タスクマネージャの2倍の値が表示されていますが、100以上の値もきっちり正しく表示されます。

取得できる上限を200にする方法か、タスクマネージャで表示されている値を
簡単に取得できる方法はありませんか?


680:デフォルトの名無しさん
10/03/14 20:16:50
ちょっと取得してる部分のコード晒してみろよ

681:デフォルトの名無しさん
10/03/14 20:30:47
このような感じです。

// オープン
HQUERY hQuery;
PdhOpenQuery(NULL,0,&hQuery);

// カウンタ追加
HCOUNTER hCounter;
std::string str = "\\Process(GOM)\\% Processor Time";
PdhAddCounter(hQuery, str.c_str(), 0, &hCounter );

// 3秒間の負荷計測
PdhCollectQueryData(hQuery);
Sleep(3000);
PdhCollectQueryData(hQuery);

// 計測結果取得
PDH_FMT_COUNTERVALUE fntValue;
PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &fntValue);

// クローズ
PdhCloseQuery( m_hQuery );

std::cout << fntValue.longValue << std::endl;

682:デフォルトの名無しさん
10/03/14 20:42:15
>>666
俺なんて引数も戻り値もちゃんと覚えているのは10個もない。
ただ、どんなAPIが「存在するか」はだいたい把握している。

683:デフォルトの名無しさん
10/03/14 21:16:25
>>681
PdhGetFormattedCounterValueのヘルプを見てみたが、
dwFormatにPDH_FMT_NOCAP100フラグが無いと、
100を超える値は全て100で返る仕様っぽいぞ。
家はシングルコアだから試しようが無いけどなorz

684:デフォルトの名無しさん
10/03/14 21:29:01
>>683
おっしゃるとおりでした!
PDH_FMT_NOCAP100フラグを立てると100以上の値も取得できるようになりました。
ありがとうございます!

685:デフォルトの名無しさん
10/03/14 22:00:40
>>666
Win32APIの目次みたいな一覧が色んな所にあるから
一通り流し読む
引数とかは一切無視
関数名と1行説明だけ読む
そんでおわり

その先輩はちょっと若いな
あんま意味の無い助言

686:デフォルトの名無しさん
10/03/15 13:52:55
昔Win32本といえばpetzoldだったけどあの本も今や.net本になってしもうたな

687:デフォルトの名無しさん
10/03/15 14:53:54
グローバルフック使ってプログラム側からキーボード操作したいんだけど、どうすればいいのか全然分からん
検索ワードだけでいいから誰か教えておくれ

688:デフォルトの名無しさん
10/03/15 14:57:59
URLリンク(msdn.microsoft.com)
大して難しくないような


まあどうすればいいか全然分からんって言う奴は
はじめからやる気がないんですけどね

689:デフォルトの名無しさん
10/03/15 15:14:17
ウィンドウメッセージを使ってるのかGetAsyncKeyState()系を使うのかで
挙動が違ってくるし、
突き詰めたらそんなに簡単な話でもないと思うけど。

690:デフォルトの名無しさん
10/03/15 15:24:05
ありがと
でもググっても監視する方しか分かんないや

691:デフォルトの名無しさん
10/03/15 16:22:08
送るだけならフックの必要は無いから見つからないのも当然

692:デフォルトの名無しさん
10/03/15 20:19:51
シリアル通信について教えてください。
「WaitCommEvent」はタイムアウトで戻す事は出来ないんでしょうか?
タイムアウトはRead,Writeのみなんでしょうか?


693:デフォルトの名無しさん
10/03/15 21:59:48
非同期通信に対応してるのだから、勝手にタイムアウトでも何でもすればいい。

694:692
10/03/15 22:19:59
そのタイムアウトさせるのを、監視するスレッドを自前で作る必要があるのか
SetCommTimeoutsみたいな設定で、WaitCommEventからイベント無しで
戻せるのか知りたいんです。

695:デフォルトの名無しさん
10/03/15 22:52:42
>>692
昔やった方法
・CreateFile()でPENDINGで開く
・WaitCommEvent()でイベントオブジェクトとともに渡す→すぐ返る→戻り値0、GetLastError()がPENDINGなら正常
・WaitForMultipleObjects()に指定し、でタイムアウトつきで待つ

スレッド化してるからWait~で他のイベントオブジェクトもついでに待ってたな。

ググればどこかにサンプルがあるはず。自力で書けなかった記憶があるから。
特にPENDINGを使用する箇所

696:692
10/03/15 23:23:06
>>695
PENDINGとはオーバーラップド構造体云々ってやつですか?
良く分からないので明日ヘルプ見ながら実機でちまちま試してみます、
有難うございました


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch