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/
探検
Win32API質問箱 Build123©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
166デフォルトの名無しさん
2016/11/19(土) 12:52:23.68ID:LZczXE+c > MF_DISABLEDとMF_GRAYEDが違ったのはWindows3.1とかの時代で今は同じ
7で非エアロ + 視覚効果を無効にした場合はどちらになりますか
7で非エアロ + 視覚効果を無効にした場合はどちらになりますか
168デフォルトの名無しさん
2016/11/20(日) 10:34:28.02ID:rUGeTkRI Windows3.1 って 標準で1画面に16色しか使えなかった時代の名残だから忘れていい
169デフォルトの名無しさん
2016/11/20(日) 10:50:09.74ID:pCJ1qvOZ 3.1のときには256や6万色普通にあったろ
170デフォルトの名無しさん
2016/11/20(日) 12:16:32.29ID:KiQiujJB 16bit と間違ったんじゃね
171デフォルトの名無しさん
2016/11/20(日) 12:20:21.09ID:IiH4Q+hE PC-9801の話だと思った。
172デフォルトの名無しさん
2016/11/20(日) 16:35:07.06ID:HG1JDYXN PCG
173デフォルトの名無しさん
2016/11/21(月) 11:15:47.37ID:RFCc0VFb ビデオカード次第だったよな
174デフォルトの名無しさん
2016/11/21(月) 12:21:40.28ID:gVIfBZaZ PSG
175デフォルトの名無しさん
2016/11/22(火) 15:36:11.99ID:qW+6ZAFd sscanf(buffer, "%4s", &data)の4の部分に変数を使いたい場合ってどうしたらいいんでしょう?
176デフォルトの名無しさん
2016/11/22(火) 15:42:16.93ID:eab8TQx6 "%4s"をsprintfで作る
177片山博文MZ ◆T6xkBnTXz7B0
2016/11/22(火) 15:44:33.07ID:iRpYF31I "%*s"
178デフォルトの名無しさん
2016/11/22(火) 15:45:01.21ID:RWgWe0KR179デフォルトの名無しさん
2016/11/22(火) 15:47:04.45ID:RWgWe0KR180デフォルトの名無しさん
2016/11/22(火) 18:37:11.83ID:mC9XTyoU ウンコしてくる
181デフォルトの名無しさん
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 が
廃止されてしまってこの手が使えません。
ImmNotifyIME で CPS_CONVERT、NI_OPENCANDIDATE を投げて
変換候補リストを表示したいのですが、MS-IME 系では問題なく使えていますが、
GoogleIME では変換候補リストが表示されません。
変換したい文字列が入力された状態にはなっていますが、変換候補リストが表示されない
だけでなく、キーボードで変換キーを押しても変換自体ができません。
(GoogleIME ではキー入力でただちに予測変換一覧が表示される仕組みだからか?)
これを実現するには、imm ではなく tsf に移行するしかないのでしょうか?
imm を使わず keybd_event でキー入力をエミュレートすればある程度実現できたのですが、
(文字入力→変換キー→変換候補一覧表示)
変換候補一覧を表示するための変換キーを押す回数が、MS-IME と GoogleIME では異なる
のが困ります。
ImmGetDescription で動作を切り分けることも考えましたが、そもそも ImmGetDescription が
廃止されてしまってこの手が使えません。
182デフォルトの名無しさん
2016/11/27(日) 16:59:16.60ID:CC34oqbC Watashi no Namae wa Nakano desu
183デフォルトの名無しさん
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
https://www.youtube.com/watch?v=TnZEDQchkJk
185デフォルトの名無しさん
2016/11/29(火) 12:19:49.33ID:ITJWJL4i 分かる方、教えて下さい。
プログラムの処理時間を計っているのですが、
GetThreadTimes()で取得した時間をもとに計算した処理時間(CPU時間)が
timeGetTime()で取得した時間をもとに計算した処理時間(実時間)より長くなりました。
スレッドが複数のコアを同時に使うことはないので
こういうことは起こらないはずだと思うのですが、
どういう場合に起こるのでしょうか。
なお、1/16秒くらいの精度しかないことは、認識しています。
その上でループを何度も回して十分な時間動作させた上で、
前者が後者の2倍くらいになってしまうのです。
プログラムの処理時間を計っているのですが、
GetThreadTimes()で取得した時間をもとに計算した処理時間(CPU時間)が
timeGetTime()で取得した時間をもとに計算した処理時間(実時間)より長くなりました。
スレッドが複数のコアを同時に使うことはないので
こういうことは起こらないはずだと思うのですが、
どういう場合に起こるのでしょうか。
なお、1/16秒くらいの精度しかないことは、認識しています。
その上でループを何度も回して十分な時間動作させた上で、
前者が後者の2倍くらいになってしまうのです。
186デフォルトの名無しさん
2016/11/29(火) 12:57:55.07ID:NaRikWXT GetThreadTimesで計算したのは処理時間でなくスレッド生成オーバーヘッドとかも含んでるからとか?
187185
2016/11/29(火) 13:40:47.29ID:ITJWJL4i188デフォルトの名無しさん
2016/11/29(火) 13:46:46.72ID:W5POPsuB >>185
思いつくのはこのあたり
・単位は合っているか。GetThreadTimes()は100ナノ秒単位、timeGetTime()は1ミリ秒単位
・GetThreadTimes()の計算方法は、作成時刻から終了時刻までの差なのか、カーネル・ユーザモードの実行時間の合計なのか
・timeGetTime()はいつどのタイミング、またどの場所で呼び出しているのか
・timeGetTime()が計測スレッド内部で実行されているなら
GetThreadTimes()の“作成時刻”からtimeGetTime()が実行されるまでの時間が含まれていない
・timeGetTime()が計測スレッド内部で実行されているなら
終了時のtimeGetTime()の呼び出しからGetThreadTimes()の“終了時刻”までの時間が含まれていない
・カーネル・ユーザモードの合計なら他のスレッドの“実行時間”が含まれていない
思いつくのはこのあたり
・単位は合っているか。GetThreadTimes()は100ナノ秒単位、timeGetTime()は1ミリ秒単位
・GetThreadTimes()の計算方法は、作成時刻から終了時刻までの差なのか、カーネル・ユーザモードの実行時間の合計なのか
・timeGetTime()はいつどのタイミング、またどの場所で呼び出しているのか
・timeGetTime()が計測スレッド内部で実行されているなら
GetThreadTimes()の“作成時刻”からtimeGetTime()が実行されるまでの時間が含まれていない
・timeGetTime()が計測スレッド内部で実行されているなら
終了時のtimeGetTime()の呼び出しからGetThreadTimes()の“終了時刻”までの時間が含まれていない
・カーネル・ユーザモードの合計なら他のスレッドの“実行時間”が含まれていない
189デフォルトの名無しさん
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までの差が含まれていないと思うけど。
ポイントαの時刻って言うのも「スレッドの作成を開始した時刻」なのか「スレッドの作成が完了した時刻」なのかでも誤差は生じる。
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倍くらいになることもあります。
・スレッド生成及び終了の処理部分は計っていません。
・timeGetTime()とGetThreadTimes()の単位の違いは認識しています。
・GetThreadTimes()による時間の計り方ですが、
CreationTimeとExitTimeは一切使用せず、
KernelTimeとUserTimeだけを使用して、チェックポイント間の差を取り、
ユーザーモード時間とカーネルモード時間を個別に出しています。
・スレッドの開始及び終了は、チェックポイント間に入っていません。
>>189のイメージでいう所のBとCの間のいろいろ実行の部分だけを計っている感じです。
>>189
・今動かしてみたら、
500回ほど回して平均を取った上での数字として、
B-C間の測定結果が、
timeGetTime()の場合で9msec
カーネルモード時間が429usec
ユーザモード時間が14037usec
になりました。
2倍までいってませんが、2倍くらいになることもあります。
・スレッド生成及び終了の処理部分は計っていません。
191デフォルトの名無しさん
2016/11/29(火) 15:45:24.23ID:1SK7brxW GetThreadTimesが必ずしも正確な時間を返さない可能性もある
スレッドの切り替えは可能な限り超早業で行う必要があるので
細かな正確な時間など、二の次かもしれない
もっと長い時間のかかる処理(10秒とか)を走らせてみて
実時間とスレッド時間を比較してみては?
もしそれで上手くいくのなら、スレッド時間の精度の問題という
可能性が濃厚になる
スレッドの切り替えは可能な限り超早業で行う必要があるので
細かな正確な時間など、二の次かもしれない
もっと長い時間のかかる処理(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
ほぼ期待通り(本来あるべき)の結果となりました。
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
ほぼ期待通り(本来あるべき)の結果となりました。
193デフォルトの名無しさん
2016/11/29(火) 16:46:40.42ID:1SK7brxW もう一つの可能性として
timeGetTimeの方の精度があまりよくない可能性もある
>Windows NT:timeGetTime 関数の既定の精度は、マシンによっては 5 ミリ秒以上になる場合があります。
とMSDNにも書いてあるしな
君が最初に測ろうとしていた処理の時間は
>timeGetTime()の場合で9msec
であるから、timeGetTime の「デフォルト」の精度の「5ミリ秒以上になる」は無視できない誤差だね
timeGetTimeの方の精度があまりよくない可能性もある
>Windows NT:timeGetTime 関数の既定の精度は、マシンによっては 5 ミリ秒以上になる場合があります。
とMSDNにも書いてあるしな
君が最初に測ろうとしていた処理の時間は
>timeGetTime()の場合で9msec
であるから、timeGetTime の「デフォルト」の精度の「5ミリ秒以上になる」は無視できない誤差だね
194185
2016/11/29(火) 17:48:25.90ID:ITJWJL4i195デフォルトの名無しさん
2016/11/29(火) 18:02:52.57ID:kNMZE4WL196デフォルトの名無しさん
2016/11/29(火) 18:14:13.77ID:NaRikWXT197デフォルトの名無しさん
2016/11/29(火) 18:40:14.32ID:3TFqVZYr いや、、、誤差の平均取るなら複数の環境でやらんと
同じ環境ならプラスばっかりとかマイナスばっかりとかあるべ
同じ環境ならプラスばっかりとかマイナスばっかりとかあるべ
198デフォルトの名無しさん
2016/11/29(火) 19:46:40.98ID:w2ftYsPy 環境というか仕組み上プラスしかないとかマイナスしかないということもある
199デフォルトの名無しさん
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()が真値より随分大きな値を返していることが強く疑われます。
クロックの誤差は、通常は、クロック更新粒度に起因する誤差であり、
それは一様な分布であるため、平均処理で抑えられます。
しかし、明らかにプラス方向の誤差が生じており、
クロック精度とは別の何らかの原因があるはずなのですが、
現在、原因の特定に至っていません。
スレッドのCPU時間が実時間よりだいぶ長くなるコードの時間測定ですが、
該当コードを2回実行するコードと3回実行するコードも計ってみました。
(いずれも500回平均です。)
1回
timeGetTime()による時間:7msec
カーネルモード時間:1060usec
ユーザモード時間:13540usec
2回
timeGetTime()による時間:14msec
カーネルモード時間:2246usec
ユーザモード時間:13291usec
3回
timeGetTime()による時間:21msec
カーネルモード時間:2527usec
ユーザモード時間:19468usec
このデータから、
timeGetTime()はかなり正確であり、
GetThreadTimes()が真値より随分大きな値を返していることが強く疑われます。
クロックの誤差は、通常は、クロック更新粒度に起因する誤差であり、
それは一様な分布であるため、平均処理で抑えられます。
しかし、明らかにプラス方向の誤差が生じており、
クロック精度とは別の何らかの原因があるはずなのですが、
現在、原因の特定に至っていません。
201デフォルトの名無しさん
2016/11/30(水) 00:10:42.24ID:V/PBKRN8 >>200
「クロック更新粒度」がいわゆるtickのことなら常に一方向に偏るはず。
timeGetTimeはtick単位の値を返すから、より正確な値を返すGetThreadTimesより
短い時間を返す、ということじゃないの?
「クロック更新粒度」がいわゆるtickのことなら常に一方向に偏るはず。
timeGetTimeはtick単位の値を返すから、より正確な値を返すGetThreadTimesより
短い時間を返す、ということじゃないの?
202デフォルトの名無しさん
2016/11/30(水) 00:21:37.30ID:tnQQtKaj いや
開始タイムが実際の時間より小さければ、測定タイムは増えるし
終了タイムが実際の時間より小さければ、測定タイムは減るので
・・・
何が言いたいのか自分でもよくわからなくなったが
同じ方向へ偏っても、end - begin で計算するから
符号は反対だから打ち消しあうといいますか
複数回測定して平均をとれば均一になるという彼の意見も一理あるかと
ただ、なぜ、timeBeginPeriod しないのかは謎だけど、いや、しているのかもしれんが
開始タイムが実際の時間より小さければ、測定タイムは増えるし
終了タイムが実際の時間より小さければ、測定タイムは減るので
・・・
何が言いたいのか自分でもよくわからなくなったが
同じ方向へ偏っても、end - begin で計算するから
符号は反対だから打ち消しあうといいますか
複数回測定して平均をとれば均一になるという彼の意見も一理あるかと
ただ、なぜ、timeBeginPeriod しないのかは謎だけど、いや、しているのかもしれんが
203デフォルトの名無しさん
2016/11/30(水) 00:52:07.64ID:ZP8Eu14+ 単純に時間取ってくる関数とスレッドのアクセス権取ってきたりしなきゃ関数とで比べたら後者の方が時間かかるよ
1度の実行でmsec変わるなら別に原因あるだろうが
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は全く同じコードです。
下記結果となりました。
A
timeGetTime()による時間:8msec
カーネルモード時間:343usec
ユーザモード時間:14664usec
B
timeGetTime()による時間:7msec
カーネルモード時間:93usec
ユーザモード時間:904usec
スレッドCPU時間において、
AがBより圧倒的に長くなりました。
なぜこのようなことが起こるのか分かりません。
どのような可能性があるでしょうか。
なお、>>200で触れましたが、
timeGetTime()は比較的正確です。
1回目と2回目に分けて測定しました。
すなわち、
timeGetTime(); GetThreadTimes();
時間測定対象コード A
timeGetTime(); GetThreadTimes();
時間測定対象コード B
timeGetTime(); GetThreadTimes();
とし、500回の平均で計測しました。
AとBは全く同じコードです。
下記結果となりました。
A
timeGetTime()による時間:8msec
カーネルモード時間:343usec
ユーザモード時間:14664usec
B
timeGetTime()による時間:7msec
カーネルモード時間:93usec
ユーザモード時間:904usec
スレッドCPU時間において、
AがBより圧倒的に長くなりました。
なぜこのようなことが起こるのか分かりません。
どのような可能性があるでしょうか。
なお、>>200で触れましたが、
timeGetTime()は比較的正確です。
207デフォルトの名無しさん
2016/11/30(水) 18:01:03.98ID:3E8a/W4X まあ当然の結果だな
208185
2016/11/30(水) 18:01:22.28ID:NmhabroG ああ、もう時間がない。
今日までにCPU時間測定結果を報告しないといけないので。
GetThreadTimes()は信用できないという前提のもと、
timeGetTime()の結果も参考に、
推測されるおおよそのCPU時間ってことで報告するしかなさそうです。
皆さんありがとうございました。
今日までにCPU時間測定結果を報告しないといけないので。
GetThreadTimes()は信用できないという前提のもと、
timeGetTime()の結果も参考に、
推測されるおおよそのCPU時間ってことで報告するしかなさそうです。
皆さんありがとうございました。
209185
2016/11/30(水) 18:02:13.44ID:NmhabroG210デフォルトの名無しさん
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時間の見積もり方で妥当でしょうか。
実時間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回だけ測定してみると意味ないのがわかる。
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垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
.
■■人間性に批判殺到 あの悪質パクツイ垢 @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:b9TNuS14216デフォルトの名無しさん
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時間って何なのでしょうか?
不思議だらけで、困惑しております。
ですと、実時間を超えるCPU時間になり得ると?
プロセスCPU時間ではなくスレッドCPU時間で。
同じ処理なのに2回目が1回目の6%のCPU時間で妥当だと?
メモリアクセスのキャッシュヒット率に違いがあるとか
そういうことであれば分かります。
でも、CPU時間ですよ。
CPU時間で圧倒的に2回目が有利でしょうか?
だとしても、
実時間の2倍近いスレッドCPU時間って何なのでしょうか?
不思議だらけで、困惑しております。
218デフォルトの名無しさん
2016/11/30(水) 23:54:22.80ID:R/TXkRDp >>217
先ずその測定方法では誤差が偏り問題を回避できなかったという事実を認めろ
500回繰り替えして全体の時間を500で割るなら誤差を縮小出来るが
一回分の時間を積み上げたところで誤差も同じように積み上がったということだろ
一回分の時間を積算して精度の問題を解消するには測定開始時刻が
tick周期に対して完全に自由でなければならないのでは?
どんな測定方法をしたのか分からないけどプログラムの起動やスレッド生成や
スケジューリングのスイッチなどがtickと相関関係にあれば破綻する方法だったんだろ
先ずその測定方法では誤差が偏り問題を回避できなかったという事実を認めろ
500回繰り替えして全体の時間を500で割るなら誤差を縮小出来るが
一回分の時間を積み上げたところで誤差も同じように積み上がったということだろ
一回分の時間を積算して精度の問題を解消するには測定開始時刻が
tick周期に対して完全に自由でなければならないのでは?
どんな測定方法をしたのか分からないけどプログラムの起動やスレッド生成や
スケジューリングのスイッチなどがtickと相関関係にあれば破綻する方法だったんだろ
219デフォルトの名無しさん
2016/11/30(水) 23:55:15.34ID:nOqMl3Nb >>215
GetThreadTimesが切り捨てなのか切り上げなのか、平均をとればうまい具合になるのか
あなたの環境で要確認。
206-Aは精度的にあり得るが、Bは異様に少なすぎるので、測定ミスを疑われるレベルですね。
コードを見ないとなんとも言えないですが、対象部分を適当な計算をするループに
変えても起こるんでしょうか?
GetThreadTimesが切り捨てなのか切り上げなのか、平均をとればうまい具合になるのか
あなたの環境で要確認。
206-Aは精度的にあり得るが、Bは異様に少なすぎるので、測定ミスを疑われるレベルですね。
コードを見ないとなんとも言えないですが、対象部分を適当な計算をするループに
変えても起こるんでしょうか?
220デフォルトの名無しさん
2016/12/01(木) 00:37:40.42ID:cvCPUZP4 みんな憶測で偉そうに話すしかできないんだから、再現コード上げたらいいだけやん
221デフォルトの名無しさん
2016/12/01(木) 00:49:48.35ID:O5qZU2qd GetThreadTimes,つまりスレッドを作っているんだろ
1回目と2回目以降で違って当然じゃねぇ?
1回目と2回目以降で違って当然じゃねぇ?
222デフォルトの名無しさん
2016/12/01(木) 00:54:41.76ID:O5qZU2qd クロックカウンタ使えよ
223デフォルトの名無しさん
2016/12/01(木) 02:56:36.59ID:wMlr02vN CPUがいくら速くても切り替えは60Hzくらい
224デフォルトの名無しさん
2016/12/01(木) 04:56:48.70ID:O5qZU2qd スタック生成だけ考えても1回目と2回目以降で違ってくると思う
225185
2016/12/01(木) 11:21:31.25ID:SFr2s2fw226185
2016/12/01(木) 11:39:04.09ID:SFr2s2fw >>220
職業プログラマなので実際のコードを公開することはできませんが、大よそ以下のようなものです。
========ここから========
tRealA=0;
tRealB=0;
tUserA=0;
tUserB=0;
for (int i=0; i<500; ++i){
いろいろ
tReal1=timeGetTime();
GetThreadTimes(...,&tUser1);
func(...); //A
tReal2=timeGetTime();
GetThreadTimes(...,&tUser2);
func(...); //B
tReal3=timeGetTime();
GetThreadTimes(...,&tUser3);
いろいろ
tRealA += tReal2-tReal1;
tRealB += tReal3-tReal2;
tUserA += tUser2-tUser1;
tUserB += tUser3-tUser2;
}
tRealA/=500;
tRealB/=500;
tUserA/=500;
tUserB/=500;
========ここまで========
>>219
func()がvolatile intをひたすらインクリメントするコードの場合は、期待通りの結果>>192がでます。しかし、func()を目的のコード(他者製ライブラリの関数)にすると、不自然な結果>>206になります。
>>216、>>224
AとBで何がそんなに変わるでしょうか。
職業プログラマなので実際のコードを公開することはできませんが、大よそ以下のようなものです。
========ここから========
tRealA=0;
tRealB=0;
tUserA=0;
tUserB=0;
for (int i=0; i<500; ++i){
いろいろ
tReal1=timeGetTime();
GetThreadTimes(...,&tUser1);
func(...); //A
tReal2=timeGetTime();
GetThreadTimes(...,&tUser2);
func(...); //B
tReal3=timeGetTime();
GetThreadTimes(...,&tUser3);
いろいろ
tRealA += tReal2-tReal1;
tRealB += tReal3-tReal2;
tUserA += tUser2-tUser1;
tUserB += tUser3-tUser2;
}
tRealA/=500;
tRealB/=500;
tUserA/=500;
tUserB/=500;
========ここまで========
>>219
func()がvolatile intをひたすらインクリメントするコードの場合は、期待通りの結果>>192がでます。しかし、func()を目的のコード(他者製ライブラリの関数)にすると、不自然な結果>>206になります。
>>216、>>224
AとBで何がそんなに変わるでしょうか。
227デフォルトの名無しさん
2016/12/01(木) 11:55:52.25ID:lOA8D/0g 最適化切ったら
228デフォルトの名無しさん
2016/12/01(木) 12:02:28.97ID:5zfWITAP 木屋さん元気かな
事故ったのは知ってるけど
どのくらいご回復されたかな
事故ったのは知ってるけど
どのくらいご回復されたかな
229デフォルトの名無しさん
2016/12/01(木) 12:14:25.23ID:i7gsdi/t230185
2016/12/01(木) 13:04:50.94ID:SFr2s2fw >>227
コンパイラの最適化のことですよね。
コンパイラの最適化を無効にして、やってみました。
A
timeGetTime()による時間:7msec
カーネルモード時間:499usec
ユーザモード時間:14882usec
B
timeGetTime()による時間:7msec
カーネルモード時間:31usec
ユーザモード時間:124usec
同じ傾向になりました。
コンパイラの最適化のことですよね。
コンパイラの最適化を無効にして、やってみました。
A
timeGetTime()による時間:7msec
カーネルモード時間:499usec
ユーザモード時間:14882usec
B
timeGetTime()による時間:7msec
カーネルモード時間:31usec
ユーザモード時間:124usec
同じ傾向になりました。
231デフォルトの名無しさん
2016/12/01(木) 13:30:33.53ID:O5qZU2qd232デフォルトの名無しさん
2016/12/01(木) 13:34:44.58ID:RgG4Eqmg >>226
いろいろ のところでライブラリの初期化とかやってない?
1回目はデータ構築処理があるのでCPUタイムを食うが、2回目は不要なのでCPUタイムを食わないとか。
で、DBとかサーバーへの問い合わせがあるので、7msくらいはかかってしまうなんてことは無いのか。
あるいは、2回目はfuncの中で別スレッドを起動して計算しているので、元スレッドのCPUタイムは食わないとか。
A B だけでなく A B C D と4回くらいやっても同じ傾向か、平均でなくすべてのタイムを見て
極端にばらつく値がないか調べるとかも必要では?
いろいろ のところでライブラリの初期化とかやってない?
1回目はデータ構築処理があるのでCPUタイムを食うが、2回目は不要なのでCPUタイムを食わないとか。
で、DBとかサーバーへの問い合わせがあるので、7msくらいはかかってしまうなんてことは無いのか。
あるいは、2回目はfuncの中で別スレッドを起動して計算しているので、元スレッドのCPUタイムは食わないとか。
A B だけでなく A B C D と4回くらいやっても同じ傾向か、平均でなくすべてのタイムを見て
極端にばらつく値がないか調べるとかも必要では?
233デフォルトの名無しさん
2016/12/01(木) 22:49:24.47ID:/t7qmsTu234デフォルトの名無しさん
2016/12/02(金) 08:27:00.87ID:GvPbDV6s どこがWin32APIの話なんだよ、ってことになるよなあ。
長々と議論に付き合ってた方々、お疲れ様。
長々と議論に付き合ってた方々、お疲れ様。
235デフォルトの名無しさん
2016/12/02(金) 09:07:26.76ID:0vMtCyDD 粒度の平均化してるとか言って全く出来てないし
精度の悪い数字を正しいと断定してるし
しかも間違ってる
何度も指摘してるのに正そうとしない
全部ダメでしょ。
精度の悪い数字を正しいと断定してるし
しかも間違ってる
何度も指摘してるのに正そうとしない
全部ダメでしょ。
236デフォルトの名無しさん
2016/12/02(金) 09:21:55.13ID:+ocxhyeH >>211みたいな事言ってるからお察し
237185
2016/12/02(金) 10:43:58.72ID:H1x5ETqP 報告書は突っ返されたので、まだまだ続きそうです。
まず、大大大前提を確認したいのですが、
GetThreadTimes()で取得するCPU時間は
スレッドがCPUをとっている時間で、
一つのスレッドが同時に複数のコアを占有することはないので、
(精度云々ではなく定義上は)スレッドのCPU時間は実時間以下である(以下のペースで進む)。
これは、大前提としてあってますよね?
まず、大大大前提を確認したいのですが、
GetThreadTimes()で取得するCPU時間は
スレッドがCPUをとっている時間で、
一つのスレッドが同時に複数のコアを占有することはないので、
(精度云々ではなく定義上は)スレッドのCPU時間は実時間以下である(以下のペースで進む)。
これは、大前提としてあってますよね?
238デフォルトの名無しさん
2016/12/02(金) 10:47:04.34ID:rEQGNTwO なんだ学校の課題だったのか
239デフォルトの名無しさん
2016/12/02(金) 11:24:10.48ID:EDk65fqO 質問者より賢い人はいないのか?
これでは、質問箱が成り立たないなw
これでは、質問箱が成り立たないなw
240デフォルトの名無しさん
2016/12/02(金) 11:27:08.99ID:+ocxhyeH241デフォルトの名無しさん
2016/12/02(金) 11:48:56.99ID:2Jj/uLxs だから再現できるサンプルをサクッと上げろよ。
だれも実物や社外ライブラリまで上げろといってないんだわ。
コーディングやデバッグ能力以外の能力が大きく欠如してるだろ。
だれも実物や社外ライブラリまで上げろといってないんだわ。
コーディングやデバッグ能力以外の能力が大きく欠如してるだろ。
242185
2016/12/02(金) 11:58:27.27ID:H1x5ETqP 10回やってみました。
つまり、>>226のコードでAとBだけでなく、AからJまでやってみました。
A
timeGetTime()による時間:7msec
カーネルモード時間:1092usec
ユーザモード時間:14133usec
B
timeGetTime()による時間:7msec
カーネルモード時間:249usec
ユーザモード時間:343usec
C
timeGetTime()による時間:7msec
カーネルモード時間:936usec
ユーザモード時間:9141usec
D
timeGetTime()による時間:7msec
カーネルモード時間:1372usec
ユーザモード時間:4180usec
E
timeGetTime()による時間:7msec
カーネルモード時間:561usec
ユーザモード時間:6583usec
F
timeGetTime()による時間:7msec
カーネルモード時間:717usec
ユーザモード時間:7737usec
G
timeGetTime()による時間:7msec
カーネルモード時間:468usec
ユーザモード時間:4773usec
つまり、>>226のコードでAとBだけでなく、AからJまでやってみました。
A
timeGetTime()による時間:7msec
カーネルモード時間:1092usec
ユーザモード時間:14133usec
B
timeGetTime()による時間:7msec
カーネルモード時間:249usec
ユーザモード時間:343usec
C
timeGetTime()による時間:7msec
カーネルモード時間:936usec
ユーザモード時間:9141usec
D
timeGetTime()による時間:7msec
カーネルモード時間:1372usec
ユーザモード時間:4180usec
E
timeGetTime()による時間:7msec
カーネルモード時間:561usec
ユーザモード時間:6583usec
F
timeGetTime()による時間:7msec
カーネルモード時間:717usec
ユーザモード時間:7737usec
G
timeGetTime()による時間:7msec
カーネルモード時間:468usec
ユーザモード時間:4773usec
243185
2016/12/02(金) 11:58:51.26ID:H1x5ETqP H
timeGetTime()による時間:7msec
カーネルモード時間:655usec
ユーザモード時間:9672usec
I
timeGetTime()による時間:7msec
カーネルモード時間:218usec
ユーザモード時間:4149usec
J
timeGetTime()による時間:7msec
カーネルモード時間:405usec
ユーザモード時間:10795usec
全体(A〜J)
timeGetTime()による時間:74msec
カーネルモード時間:6645usec
ユーザモード時間:71510usec
timeGetTime()による時間:7msec
カーネルモード時間:655usec
ユーザモード時間:9672usec
I
timeGetTime()による時間:7msec
カーネルモード時間:218usec
ユーザモード時間:4149usec
J
timeGetTime()による時間:7msec
カーネルモード時間:405usec
ユーザモード時間:10795usec
全体(A〜J)
timeGetTime()による時間:74msec
カーネルモード時間:6645usec
ユーザモード時間:71510usec
244デフォルトの名無しさん
2016/12/02(金) 12:10:39.48ID:fHtgnGrJ 仕事が出来ないから、タダで手取り足取り協力してくれってか
245185
2016/12/02(金) 13:02:57.14ID:H1x5ETqP246デフォルトの名無しさん
2016/12/02(金) 13:27:24.15ID:bjzW9gj9 >>228
ドラスレの木屋さんも、timeGetTimeのこと調べてたな
ドラスレの木屋さんも、timeGetTimeのこと調べてたな
247デフォルトの名無しさん
2016/12/02(金) 14:04:58.11ID:ELslSS33 timeGetTimeやめてQueryPerformanceCounterを使ったら?
248デフォルトの名無しさん
2016/12/02(金) 14:15:28.80ID:ocojT6FV 内容のアホさからして
オバケじゃないことは確実
オバケじゃないことは確実
249デフォルトの名無しさん
2016/12/02(金) 14:17:49.26ID:6Vgvdyao あらかじめtimeBeginPeriodも呼んでおかないと精度変わる
250デフォルトの名無しさん
2016/12/02(金) 14:21:54.01ID:ELslSS33 静的領域に書き込みすると、コピーオンライトが発生し、
動的領域を確保すると、最初とおよび足りない時はOSで確保と初期化があると思う
それが1回目が遅い理由な気がする
動的領域を確保すると、最初とおよび足りない時はOSで確保と初期化があると思う
それが1回目が遅い理由な気がする
251デフォルトの名無しさん
2016/12/02(金) 14:30:05.73ID:LG3SGwVv 質問者はアレだが
それはそうと、どうでも良いことをいうのはやめたほうが良いだろう
実時間とスレッド時間が食い違うって話だから
1回目が遅いとかそういう話ではない
それはそうと、どうでも良いことをいうのはやめたほうが良いだろう
実時間とスレッド時間が食い違うって話だから
1回目が遅いとかそういう話ではない
252デフォルトの名無しさん
2016/12/02(金) 17:49:56.46ID:EDk65fqO 結局>>237すら教えてあげなかったんだな。
253デフォルトの名無しさん
2016/12/02(金) 18:15:57.54ID:2Jj/uLxs 質問者のアプローチや解釈が正しいのかが分からないのに、憶測で質問者回答者とも上から目線で
やりあってる状況にまず疑問を抱いた方がいい。
そしてそれら以下の書き込みしかできないID:EDk65fqOはクソ中のクソだと認識した方がいい。
やりあってる状況にまず疑問を抱いた方がいい。
そしてそれら以下の書き込みしかできないID:EDk65fqOはクソ中のクソだと認識した方がいい。
254デフォルトの名無しさん
2016/12/02(金) 22:19:54.42ID:rH7Be8WN 最初からGetThreadTimesは約1/64秒の精度しか無いって分かっていたはずなのにね。
平均とっても意味がないってことが改めて分かったことだけが成果か。
平均とっても意味がないってことが改めて分かったことだけが成果か。
255デフォルトの名無しさん
2016/12/02(金) 23:51:36.19ID:DveiiCO5256デフォルトの名無しさん
2016/12/03(土) 10:51:33.05ID:YdYTZThj OSがどうやってカーネルモードやユーザーモードの時間を計測しているのか想像できないのかねえ
オーバーヘッドが高いやり方は採用できないと分かりそうなもんだが
オーバーヘッドが高いやり方は採用できないと分かりそうなもんだが
257デフォルトの名無しさん
2016/12/03(土) 11:08:29.93ID:JHScEEfz 触発されてGetThreadTimes=NtQueryInformationThread調べたんだけど”スレッド”の中身が興味深かった
質問者糞だから詳細は書かないがw
質問者糞だから詳細は書かないがw
258デフォルトの名無しさん
2016/12/03(土) 20:00:37.46ID:6jC0i+kE 俺もほんとはGetThreadTimesの特性知ってるけど、
質問者が土下座しないと教えてやらねぇw
質問者が土下座しないと教えてやらねぇw
259デフォルトの名無しさん
2016/12/03(土) 20:35:28.76ID:xp0AwakX GO
260デフォルトの名無しさん
2016/12/03(土) 20:36:25.77ID:xp0AwakX the old new thing
261デフォルトの名無しさん
2016/12/04(日) 11:31:12.68ID:8oIVw/6i Windows10ってCOMポート番号は最大何番までなんでしょうか?
262デフォルトの名無しさん
2016/12/04(日) 11:37:47.55ID:NE4G8kum com1〜com256まで
263デフォルトの名無しさん
2016/12/04(日) 12:08:20.93ID:HYzaL+1F 昔、レジストリから認識してるポート名を取得するサンプルあったな。
MSDNだったかな
MSDNだったかな
264デフォルトの名無しさん
2016/12/04(日) 12:22:02.41ID:SxgHpTya select欲しい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【高市朗報】 日本政府「一昨年は1300億円。去年も防衛費が1100億円余ったw」 日本の防衛費は充分足りてる事が判明。増やす必要無し [485983549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【速報】51歳まで自衛隊になれるように法改正ww [347751896]
