Win32API質問箱 Build123©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
2016/11/11(金) 12:39:26.27ID:/bmaODHZ
もうホスト名表示でいいだろ
2016/11/11(金) 13:02:50.32ID:kcpLk0Bj
何を付けても言い争いが発生するんだから、
IDくらいがちょうどいいんじゃないの。
どこのスレ見ても、荒らす奴はなにやっても荒らすし。
2016/11/11(金) 13:10:25.05ID:UQPlBidt
IDとかワッチョイとか何の意味もないのに付けたがるよね
今の2ちゃんなんか人少なくて気にするほどの書き込みもないのに
2016/11/11(金) 13:18:14.05ID:FF2/z6GJ
>>123みたいな奴が色んなスレで終盤になって現れる
その後不自然にワッチョイの話題で加速

付けてもいいけど伸びた方を使う
2016/11/11(金) 19:38:22.83ID:F0Rj6jl1
IDでじゅうぶん
2016/11/11(金) 20:04:48.37ID:0rL2xNMJ
ホスト名がベター
2016/11/11(金) 20:06:12.51ID:DbOMb6Sb
ホスト名出して主張してくれや
2016/11/11(金) 20:12:52.08ID:LmTjZr7C
ワッチョイは争いの火種
最初からないほうがまし
別にIDもいらない
2016/11/11(金) 20:36:56.45ID:F0Rj6jl1
IDはあったほうがいいね
133sp49-98-77-115.mse.spmode.ne.jp
垢版 |
2016/11/11(金) 20:37:29.90ID:0rL2xNMJ
ホスト名がベター
2016/11/11(金) 20:44:35.64ID:X9bDlJ5d
ホスト名は「たちばな誠」
2016/11/11(金) 20:51:04.74ID:Tfn5AWDv
ホスト名が良いカモね
2016/11/12(土) 04:05:38.85ID:6wPviZ3t
スレチ
137デフォルトの名無しさん
垢版 |
2016/11/12(土) 04:37:47.35ID:xxkpve4k
急激に過疎ったスレとして資料価値がある
一番勢いあったのがIDなかった時代だというのが興味深い
138デフォルトの名無しさん
垢版 |
2016/11/12(土) 07:40:36.69ID:VYJ07zOJ
単にWin32から.NETへの移行が進んだだけでしょう
2016/11/12(土) 09:21:42.48ID:cY8zOPne
たんに荒らしが伸ばしてただけでしょう
2016/11/12(土) 10:58:41.72ID:aMxeZQXn
>>137
勢いじゃなく、荒らされていた時期な
2016/11/12(土) 11:01:50.42ID:MjZ+e3Wz
回顧モード中ですが、ちょっと教えてくだされ。
スケーリング対応ってどの辺のAPIを使うといいの?
もしくは、どの辺のAPIを見直せばいいのか。
142デフォルトの名無しさん
垢版 |
2016/11/12(土) 13:10:05.51ID:VYJ07zOJ
うろ覚えだけど
SetWindowOrgEx
SetViewportOrgEx
辺りじゃないの
2016/11/12(土) 16:51:53.48ID:KzeRaaZ8
@AoA = (
[ "fred", "barney" ],
[ "george", "jane", "elroy" ],
[ "homer", "marge", "bart" ],
);
を関数に渡したいんですが、どうすればいいの?
2016/11/12(土) 18:18:57.26ID:B8iRPOxS
はあ…
2016/11/12(土) 21:46:22.81ID:6wPviZ3t
loopyを3回となえてください
2016/11/13(日) 04:10:41.48ID:+F2H1InO
>>141
DPIスケーリングならここ見ていけば大体書いてある
https://msdn.microsoft.com/en-us/library/windows/desktop/dd464646(v=vs.85).aspx
この辺のAPI使う
https://msdn.microsoft.com/en-us/library/windows/desktop/hh447398%28v=vs.85%29.aspx
真面目に対応しようとするとけっこう面倒
2016/11/13(日) 14:25:24.31ID:Wy5L1qQW
EnableMenuItem
https://msdn.microsoft.com/ja-jp/library/cc410786.aspx

>MF_DISABLED メニュー項目を無効化します。淡色表示にはしませんが、そのメニュー項目は使用不可能であり、選択できません。
>MF_GRAYED メニュー項目を淡色表示にします。そのメニュー項目は使用不可能であり、選択できません。

となっており、MF_DISABLEDはグレー表示されないように書かれていますが、
Win7で使ってみたところ、グレー表示され、MF_GRAYEDとまったく同じになりました。

MSDNが更新されていないだけで、MF_DISABLEDとMF_GRAYEDは同一挙動になったのでしょうか?
それとも、何か微妙に違いがあったりするのでしょうか?
2016/11/13(日) 19:35:16.34ID:wHFHc9ra
>>146
俺はGetWindowRectがまともに動かない時点でスケーリング対応は諦めたわ。なんなのこのクソOS
2016/11/13(日) 20:07:24.28ID:dhGoOq8f
>>148
adjustするのが定石
2016/11/13(日) 22:00:12.35ID:Wy5L1qQW
TrackPopupMenu()でポップアップメニューを表示できますが、
ポップアップメニューが表示されたことを検知できるウィンドウメッセージ等はないのでしょうか?

また、ポップアップメニュー以外のところをクリックするとポップアップメニューが非表示になりますが、
これも同様に、どのように検知すればよいでしょうか?
151150
垢版 |
2016/11/13(日) 22:35:31.57ID:Wy5L1qQW
ポップアップメニューが表示されようとしたときはWM_INITMENUPOPUPが送られてくることが分かりました。
2016/11/13(日) 23:32:34.76ID:+F2H1InO
非表示はWM_UNINITMENUPOPUP

MF_DISABLEDとMF_GRAYEDが違ったのはWindows3.1とかの時代で今は同じ
153150
垢版 |
2016/11/13(日) 23:57:21.61ID:Wy5L1qQW
>>152
ありがとうございました!
助かりました!
154デフォルトの名無しさん
垢版 |
2016/11/14(月) 17:38:20.71ID:lPYI51le
リストビューを一番下までスクロールさせるプログラムは?
2016/11/14(月) 17:39:51.88ID:L1+AAJlg
>>154
WM_VSCROLL
2016/11/14(月) 17:51:37.15ID:LtnXkA90
メッセージおくれ
2016/11/14(月) 18:02:49.89ID:NhpFtVry
ListView_EnsureVisible()マクロないしは
ListView_Scroll()マクロ
158154
垢版 |
2016/11/14(月) 19:38:32.87ID:lPYI51le
>>156-157
サンクス!
159デフォルトの名無しさん
垢版 |
2016/11/18(金) 03:17:57.05ID:OSOzrvg7
> MF_DISABLEDとMF_GRAYEDが違ったのはWindows3.1とかの時代で今は同じ
xpはどちら?
2016/11/18(金) 03:36:41.14ID:AM2vlSzW
えっ?
2016/11/18(金) 03:58:35.98ID:2yb3wpBY
>>156
つ メッセージ
2016/11/18(金) 07:05:51.48ID:8X6DMoza
Win3.1(Win16) ならスレ違いだろw
2016/11/18(金) 11:11:21.47ID:GZ4BhfWs
Win32sかもしれない
164デフォルトの名無しさん
垢版 |
2016/11/18(金) 15:45:40.16ID:sN4pSlll
WS_EX_TOOLWINDOWに関して質問です。

タイトルバーに関してです。
普通のタイトルバーより小さいタイトルバーを持つ旨説明がありますが、
小さくなりません。
通常のスタイルも色々試しましたが、通常のタイトルバーと変わりません。
変える方法を教えてください。
2016/11/18(金) 16:01:28.45ID:AM2vlSzW
win8辺りからタイトルバーが小さくならなくなったべ。
理由は知らんけど、エアログラス廃止→モダンUIの流れの一環で何か変わったのかもね。
166デフォルトの名無しさん
垢版 |
2016/11/19(土) 12:52:23.68ID:LZczXE+c
> MF_DISABLEDとMF_GRAYEDが違ったのはWindows3.1とかの時代で今は同じ
7で非エアロ + 視覚効果を無効にした場合はどちらになりますか
167164
垢版 |
2016/11/19(土) 22:31:46.85ID:m8v4iLe9
>>165
なるほど、そういうことだったんですか。
ありがとうございます。
2016/11/20(日) 10:34:28.02ID:rUGeTkRI
Windows3.1 って 標準で1画面に16色しか使えなかった時代の名残だから忘れていい
2016/11/20(日) 10:50:09.74ID:pCJ1qvOZ
3.1のときには256や6万色普通にあったろ
2016/11/20(日) 12:16:32.29ID:KiQiujJB
16bit と間違ったんじゃね
2016/11/20(日) 12:20:21.09ID:IiH4Q+hE
PC-9801の話だと思った。
2016/11/20(日) 16:35:07.06ID:HG1JDYXN
PCG
2016/11/21(月) 11:15:47.37ID:RFCc0VFb
ビデオカード次第だったよな
2016/11/21(月) 12:21:40.28ID:gVIfBZaZ
PSG
175デフォルトの名無しさん
垢版 |
2016/11/22(火) 15:36:11.99ID:qW+6ZAFd
sscanf(buffer, "%4s", &data)の4の部分に変数を使いたい場合ってどうしたらいいんでしょう?
2016/11/22(火) 15:42:16.93ID:eab8TQx6
"%4s"をsprintfで作る
2016/11/22(火) 15:44:33.07ID:iRpYF31I
"%*s"
2016/11/22(火) 15:45:01.21ID:RWgWe0KR
>>175
int space = 4;
sscanf(buffer, "%*s", space, "t")
2016/11/22(火) 15:47:04.45ID:RWgWe0KR
>>175
"t"は編集ミスだから気にしないで
*の所にspaceの値が指定される
2016/11/22(火) 18:37:11.83ID:mC9XTyoU
ウンコしてくる
2016/11/27(日) 05:47:03.44ID:9mn0D+RY
windows8.1 環境下、imm にて ImmSetCompositionString で漢字変換したい文字列を設定し、
ImmNotifyIME で CPS_CONVERT、NI_OPENCANDIDATE を投げて
変換候補リストを表示したいのですが、MS-IME 系では問題なく使えていますが、
GoogleIME では変換候補リストが表示されません。

変換したい文字列が入力された状態にはなっていますが、変換候補リストが表示されない
だけでなく、キーボードで変換キーを押しても変換自体ができません。
(GoogleIME ではキー入力でただちに予測変換一覧が表示される仕組みだからか?)

これを実現するには、imm ではなく tsf に移行するしかないのでしょうか?

imm を使わず keybd_event でキー入力をエミュレートすればある程度実現できたのですが、
(文字入力→変換キー→変換候補一覧表示)
変換候補一覧を表示するための変換キーを押す回数が、MS-IME と GoogleIME では異なる
のが困ります。

ImmGetDescription で動作を切り分けることも考えましたが、そもそも ImmGetDescription が
廃止されてしまってこの手が使えません。
2016/11/27(日) 16:59:16.60ID:CC34oqbC
Watashi no Namae wa Nakano desu
2016/11/27(日) 19:36:59.90ID:iFUA1Ofz
Watashi ni Namae wa Nakattano desu
184デフォルトの名無しさん
垢版 |
2016/11/28(月) 15:21:52.39ID:msYXnjQ5
情報通信業の残業やばす
https://www.youtube.com/watch?v=TnZEDQchkJk
185デフォルトの名無しさん
垢版 |
2016/11/29(火) 12:19:49.33ID:ITJWJL4i
分かる方、教えて下さい。

プログラムの処理時間を計っているのですが、
GetThreadTimes()で取得した時間をもとに計算した処理時間(CPU時間)が
timeGetTime()で取得した時間をもとに計算した処理時間(実時間)より長くなりました。
スレッドが複数のコアを同時に使うことはないので
こういうことは起こらないはずだと思うのですが、
どういう場合に起こるのでしょうか。

なお、1/16秒くらいの精度しかないことは、認識しています。
その上でループを何度も回して十分な時間動作させた上で、
前者が後者の2倍くらいになってしまうのです。
2016/11/29(火) 12:57:55.07ID:NaRikWXT
GetThreadTimesで計算したのは処理時間でなくスレッド生成オーバーヘッドとかも含んでるからとか?
187185
垢版 |
2016/11/29(火) 13:40:47.29ID:ITJWJL4i
>>186
そうでもないです。
スレッド生成終了は含まない部分を計っています。
チェックポイントで各関数で時刻を取り、差を計算して、
チェックポイント間にかかった時間を出しています。

>>185
1/16は1/64の誤りです。
2016/11/29(火) 13:46:46.72ID:W5POPsuB
>>185
思いつくのはこのあたり
・単位は合っているか。GetThreadTimes()は100ナノ秒単位、timeGetTime()は1ミリ秒単位
・GetThreadTimes()の計算方法は、作成時刻から終了時刻までの差なのか、カーネル・ユーザモードの実行時間の合計なのか
・timeGetTime()はいつどのタイミング、またどの場所で呼び出しているのか
・timeGetTime()が計測スレッド内部で実行されているなら
GetThreadTimes()の“作成時刻”からtimeGetTime()が実行されるまでの時間が含まれていない
・timeGetTime()が計測スレッド内部で実行されているなら
終了時のtimeGetTime()の呼び出しからGetThreadTimes()の“終了時刻”までの時間が含まれていない
・カーネル・ユーザモードの合計なら他のスレッドの“実行時間”が含まれていない
2016/11/29(火) 14:01:14.55ID:W5POPsuB
>>187
GetThreadTimes()がtimeGetTime()の2倍なんでしょ?
ただ2倍と言っても1ミリ秒が2ミリ秒になったってのと1分が2分になったというのではかなり違う
平均して何ミリ秒が何ミリ秒になったの?

timeGetTime() チェックポイントA
スレッド作成  ポイントα
timeGetTime() チェックポイントB
いろいろ実行
timeGetTime() チェックポイントC
スレッド終了  ポイントβ
timeGetTime() チェックポイントD

GetThreadTimes()はαやβの時刻であって、timeGetTime()でA〜Dのいずれかで計測しても誤差は生じる。
「スレッドが複数のコアを〜」からすると計測スレッドでチェックポイントを設けているように見受けられるので
B、C間とするとαからBまでの差が含まれていないと思うけど。
ポイントαの時刻って言うのも「スレッドの作成を開始した時刻」なのか「スレッドの作成が完了した時刻」なのかでも誤差は生じる。
190185
垢版 |
2016/11/29(火) 14:28:28.52ID:ITJWJL4i
>>188
・timeGetTime()とGetThreadTimes()の単位の違いは認識しています。
・GetThreadTimes()による時間の計り方ですが、
 CreationTimeとExitTimeは一切使用せず、
 KernelTimeとUserTimeだけを使用して、チェックポイント間の差を取り、
 ユーザーモード時間とカーネルモード時間を個別に出しています。
・スレッドの開始及び終了は、チェックポイント間に入っていません。
 >>189のイメージでいう所のBとCの間のいろいろ実行の部分だけを計っている感じです。

>>189
・今動かしてみたら、
 500回ほど回して平均を取った上での数字として、
 B-C間の測定結果が、
 timeGetTime()の場合で9msec
 カーネルモード時間が429usec
 ユーザモード時間が14037usec
 になりました。
 2倍までいってませんが、2倍くらいになることもあります。
・スレッド生成及び終了の処理部分は計っていません。
2016/11/29(火) 15:45:24.23ID:1SK7brxW
GetThreadTimesが必ずしも正確な時間を返さない可能性もある
スレッドの切り替えは可能な限り超早業で行う必要があるので
細かな正確な時間など、二の次かもしれない

もっと長い時間のかかる処理(10秒とか)を走らせてみて
実時間とスレッド時間を比較してみては?
もしそれで上手くいくのなら、スレッド時間の精度の問題という
可能性が濃厚になる
192185
垢版 |
2016/11/29(火) 16:21:45.88ID:ITJWJL4i
>>191
volatile変数をひたすらインクリメントするコードを書いて、
試してみました。

 timeGetTime()で計った時間:10560msec
 カーネルモード時間:280801usec
 ユーザモード時間:10296066usec

4個のコアを食いつぶさせるために5個同時に動かすと、

 timeGetTime()で計った時間:12sec〜18sec
 カーネルモード時間:343msec〜608msec
 ユーザモード時間:11902msec〜12729msec

1プロセスから2スレッド起動するのもやってみましたが、

 timeGetTime()で計った時間:11869msec
 スレッド1
  カーネルモード時間:312msec
  ユーザモード時間:11403msec
 スレッド2
  カーネルモード時間:390msec
  ユーザモード時間:11528msec
 プロセス
  カーネルモード時間:1092msec
  ユーザモード時間:22776msec

ほぼ期待通り(本来あるべき)の結果となりました。
2016/11/29(火) 16:46:40.42ID:1SK7brxW
もう一つの可能性として
timeGetTimeの方の精度があまりよくない可能性もある
>Windows NT:timeGetTime 関数の既定の精度は、マシンによっては 5 ミリ秒以上になる場合があります。
とMSDNにも書いてあるしな
君が最初に測ろうとしていた処理の時間は
>timeGetTime()の場合で9msec
であるから、timeGetTime の「デフォルト」の精度の「5ミリ秒以上になる」は無視できない誤差だね
194185
垢版 |
2016/11/29(火) 17:48:25.90ID:ITJWJL4i
>>193
十msec規模の誤差がありうることや、
9msecに対して5msecが無視できないことは理解します。
ただ、>>190に書いた9msecは
500回動かして平均を取っ(て整数にまるめ)た数字です。
誤差が毎回毎回プラスあるいはマイナスに偏って出るとは考えにくいので、
スレッドのCPU時間が実時間の1.5〜2倍になることについては、
誤差以外の原因があるのではないかとかんぐっています。
2016/11/29(火) 18:02:52.57ID:kNMZE4WL
>>194
> 誤差が毎回毎回プラスあるいはマイナスに偏って出るとは考えにくいので

誤差が均等にバラつくなんていう保証はないだろ
2016/11/29(火) 18:14:13.77ID:NaRikWXT
時間取得のオーバーヘッドじゃないか?

>>195
誤差の定義てか確率論の考え方を真っ向から否定してるなww
2016/11/29(火) 18:40:14.32ID:3TFqVZYr
いや、、、誤差の平均取るなら複数の環境でやらんと
同じ環境ならプラスばっかりとかマイナスばっかりとかあるべ
2016/11/29(火) 19:46:40.98ID:w2ftYsPy
環境というか仕組み上プラスしかないとかマイナスしかないということもある
2016/11/29(火) 19:46:41.38ID:Ofu9bBqm
どちらか言えばDDK(WDK)の領域じゃね
200185
垢版 |
2016/11/29(火) 20:53:31.95ID:ITJWJL4i
新たな発見がありました。

スレッドのCPU時間が実時間よりだいぶ長くなるコードの時間測定ですが、
該当コードを2回実行するコードと3回実行するコードも計ってみました。
(いずれも500回平均です。)

1回
timeGetTime()による時間:7msec
カーネルモード時間:1060usec
ユーザモード時間:13540usec

2回
timeGetTime()による時間:14msec
カーネルモード時間:2246usec
ユーザモード時間:13291usec

3回
timeGetTime()による時間:21msec
カーネルモード時間:2527usec
ユーザモード時間:19468usec

このデータから、
timeGetTime()はかなり正確であり、
GetThreadTimes()が真値より随分大きな値を返していることが強く疑われます。

クロックの誤差は、通常は、クロック更新粒度に起因する誤差であり、
それは一様な分布であるため、平均処理で抑えられます。

しかし、明らかにプラス方向の誤差が生じており、
クロック精度とは別の何らかの原因があるはずなのですが、
現在、原因の特定に至っていません。
2016/11/30(水) 00:10:42.24ID:V/PBKRN8
>>200
「クロック更新粒度」がいわゆるtickのことなら常に一方向に偏るはず。
timeGetTimeはtick単位の値を返すから、より正確な値を返すGetThreadTimesより
短い時間を返す、ということじゃないの?
2016/11/30(水) 00:21:37.30ID:tnQQtKaj
いや
開始タイムが実際の時間より小さければ、測定タイムは増えるし
終了タイムが実際の時間より小さければ、測定タイムは減るので
・・・
何が言いたいのか自分でもよくわからなくなったが
同じ方向へ偏っても、end - begin で計算するから
符号は反対だから打ち消しあうといいますか
複数回測定して平均をとれば均一になるという彼の意見も一理あるかと
ただ、なぜ、timeBeginPeriod しないのかは謎だけど、いや、しているのかもしれんが
2016/11/30(水) 00:52:07.64ID:ZP8Eu14+
単純に時間取ってくる関数とスレッドのアクセス権取ってきたりしなきゃ関数とで比べたら後者の方が時間かかるよ
1度の実行でmsec変わるなら別に原因あるだろうが
204デフォルトの名無しさん
垢版 |
2016/11/30(水) 02:17:24.90ID:WhaKofQb
馬鹿発見
205デフォルトの名無しさん
垢版 |
2016/11/30(水) 03:54:14.51ID:tfyAgmME
おいおい
話逸れすぎていて草
206185
垢版 |
2016/11/30(水) 16:27:00.78ID:NmhabroG
>>200の2回実行するケースについて
1回目と2回目に分けて測定しました。

すなわち、

 timeGetTime(); GetThreadTimes();
 時間測定対象コード A
 timeGetTime(); GetThreadTimes();
 時間測定対象コード B
 timeGetTime(); GetThreadTimes();

とし、500回の平均で計測しました。
AとBは全く同じコードです。

下記結果となりました。


timeGetTime()による時間:8msec
カーネルモード時間:343usec
ユーザモード時間:14664usec

timeGetTime()による時間:7msec
カーネルモード時間:93usec
ユーザモード時間:904usec

スレッドCPU時間において、
AがBより圧倒的に長くなりました。
なぜこのようなことが起こるのか分かりません。
どのような可能性があるでしょうか。

なお、>>200で触れましたが、
timeGetTime()は比較的正確です。
2016/11/30(水) 18:01:03.98ID:3E8a/W4X
まあ当然の結果だな
208185
垢版 |
2016/11/30(水) 18:01:22.28ID:NmhabroG
ああ、もう時間がない。
今日までにCPU時間測定結果を報告しないといけないので。
GetThreadTimes()は信用できないという前提のもと、
timeGetTime()の結果も参考に、
推測されるおおよそのCPU時間ってことで報告するしかなさそうです。

皆さんありがとうございました。
209185
垢版 |
2016/11/30(水) 18:02:13.44ID:NmhabroG
>>207
おっと!
なぜ当然の結果なのですか。
教えて下さい。
2016/11/30(水) 18:03:45.74ID:3E8a/W4X
ゲームスレで聞いてみ
211185
垢版 |
2016/11/30(水) 18:15:54.33ID:NmhabroG
>>210
そうですか。教えてくれないなら結構です。
212185
垢版 |
2016/11/30(水) 19:24:20.97ID:NmhabroG
>>200に示したように、1回だけ実行すると、
実時間7msec、スレッドCPU時間14msecという不整合が起きます。

ところが10回実行して計ると、
実時間78msec、スレッドCPU時間80msecとなります。

これでも不整合はあるものの、
実時間≒スレッドCPU時間であることから、
1回の場合でも実時間≒スレッドCPU時間であることが想定される。
また実時間の方がより信頼できることが分かっている。
したがって、1回実行時のスレッドCPU時間は7.8msec程度であろう。

このようなスレッドCPU時間の見積もり方で妥当でしょうか。
213デフォルトの名無しさん
垢版 |
2016/11/30(水) 20:49:07.15ID:5wEUj1of
>>212
GetThreadTimesの精度は15.6msなので、ある程度時間のかかる処理でないと
意味が無い。7msの処理をはかると0か15になるかのどちらか。
数百回の平均をとるのではなく1回だけ測定してみると意味ないのがわかる。
214デフォルトの名無しさん
垢版 |
2016/11/30(水) 20:49:57.04ID:o1dhiyLy
.
.
■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■
http://i.imgur.com/5qAgsHG.png
http://i.imgur.com/kldi84l.png
http://i.imgur.com/8vCymiC.jpg


■今までのプライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko


@riricatputi (新アカ)  http://imgur.com/a/X1vQA


100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
215185
垢版 |
2016/11/30(水) 22:05:18.43ID:b9TNuS14
>>212の方法でスレッドCPU時間を見積もって報告し、帰宅しました。
ID変わります。

>>213
クロック更新粒度に基づく精度のことは認識しています(>>185>>187)。
500回の平均を取ることでその問題を回避し、
その上で>>200>>206の結果になります。

>>206のデータは、
1回目で実時間を大きく上回るCPU時間が記録されており、
2回目で殆どCPU時間が経過していないことを表しています。
GetThreadTimes()で取得したクロックは、どうしてこのようになってしまうのか。
それが分からないんです。

どういう場合にこうなり得るのか、御存知の方は教えて下さい。
216デフォルトの名無しさん
垢版 |
2016/11/30(水) 23:20:53.03ID:EvMIugyq
1回目はいろいろオーバーヘッドあるよね
217185
垢版 |
2016/11/30(水) 23:52:18.25ID:b9TNuS14
>>216
ですと、実時間を超えるCPU時間になり得ると?
プロセスCPU時間ではなくスレッドCPU時間で。
同じ処理なのに2回目が1回目の6%のCPU時間で妥当だと?

メモリアクセスのキャッシュヒット率に違いがあるとか
そういうことであれば分かります。
でも、CPU時間ですよ。
CPU時間で圧倒的に2回目が有利でしょうか?
だとしても、
実時間の2倍近いスレッドCPU時間って何なのでしょうか?

不思議だらけで、困惑しております。
2016/11/30(水) 23:54:22.80ID:R/TXkRDp
>>217
先ずその測定方法では誤差が偏り問題を回避できなかったという事実を認めろ
500回繰り替えして全体の時間を500で割るなら誤差を縮小出来るが
一回分の時間を積み上げたところで誤差も同じように積み上がったということだろ

一回分の時間を積算して精度の問題を解消するには測定開始時刻が
tick周期に対して完全に自由でなければならないのでは?
どんな測定方法をしたのか分からないけどプログラムの起動やスレッド生成や
スケジューリングのスイッチなどがtickと相関関係にあれば破綻する方法だったんだろ
219デフォルトの名無しさん
垢版 |
2016/11/30(水) 23:55:15.34ID:nOqMl3Nb
>>215
GetThreadTimesが切り捨てなのか切り上げなのか、平均をとればうまい具合になるのか
あなたの環境で要確認。
206-Aは精度的にあり得るが、Bは異様に少なすぎるので、測定ミスを疑われるレベルですね。
コードを見ないとなんとも言えないですが、対象部分を適当な計算をするループに
変えても起こるんでしょうか?
2016/12/01(木) 00:37:40.42ID:cvCPUZP4
みんな憶測で偉そうに話すしかできないんだから、再現コード上げたらいいだけやん
221デフォルトの名無しさん
垢版 |
2016/12/01(木) 00:49:48.35ID:O5qZU2qd
GetThreadTimes,つまりスレッドを作っているんだろ
1回目と2回目以降で違って当然じゃねぇ?
222デフォルトの名無しさん
垢版 |
2016/12/01(木) 00:54:41.76ID:O5qZU2qd
クロックカウンタ使えよ
2016/12/01(木) 02:56:36.59ID:wMlr02vN
CPUがいくら速くても切り替えは60Hzくらい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況