- 1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net]
- 前スレ
C++相談室 part156 https://mevius.5ch.net/test/read.cgi/tech/1621389313/
- 321 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:39:56.43 ID:emntwqXC.net]
- >>295
全然違う。 >>230は少なくとも本人の発言からの引用であり、(権威に訴える論証が混ざっているとはいえ)すべてを否定することはできない。 >>242は自分の主張を強化するためにでっち上げた嘘であり、本人の普段の主張を否定する邪悪な紛い物。本人も否定しているものをジョークと称するのはやはり正気を疑う。
- 322 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:56:38.90 ID:emntwqXC.net]
- >>295
一言言い忘れた。 ジョークを「主張」するなよ。アホか。
- 323 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:44:12.96 ID:9obv3E3K.net]
- ワクチン拒否とかしてそう
- 324 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:45:48.31 ID:I6ZDQIJr.net]
- ダニングクルーガー効果のなんちゃってマスター状態でも容易に書けちゃうのが問題。
そのクソコードの状態でも一応動くところがC++の恐ろしいところでもあり幅広いフリーフォーマットの適応力でもある。
- 325 名前:デフォルトの名無しさん [2021/09/09(木) 19:54:26.64 ID:VcdPV4nP.net]
- jokeもhumorも馬鹿には理解できない
- 326 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:23:36.23 ID:M2q//47O.net]
- >>312
自粛警察乙 マスゴミに煽られるまま踊るのジュリアナのお立ち台みたいな気分?
- 327 名前:デフォルトの名無しさん [2021/09/09(木) 20:26:09.91 ID:5B6QjFP1.net]
- お前らってホント人にケチつけるときだけイキイキとしてんな
- 328 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:41:37.86 ID:Ja2+yviO.net]
- シャリーア・ポリスとかスシ・ポリスとかみたいな人
- 329 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:18:20.93 ID:ke/Tkn8S.net]
- オブジェクト指向も構造化も原理主義者がウザいだけで
ナンチャッテでいいからやってると問題がきれいに整理できるので やめようとは全然思わない テンプレートだってそうだ
- 330 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:23:49.14 ID:rfW8qH4V.net]
- pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg
- 331 名前:デフォルトの名無しさん [2021/09/11(土) 12:26:09.65 ID:3OqmYb77.net]
- C++には酸っぱい葡萄もある
- 332 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:37:06.92 ID:FXACoymx.net]
- テンプレートってただの超絶便利機能だろ
オブジェクト指向笑とは比べ物にならない
- 333 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:45:07.36 ID:d+bn5JZd.net]
- >>318
歴史は繰り返す、ってことだろ 一時期C++コミュニティがJavaに悪影響受けたりしてたことからJavaを嫌悪してたやつが 何でもSTLの真似してりゃ自動的に価値のあるコードになると盲信してたからな 笑うしかない
- 334 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:49:01.51 ID:ke/Tkn8S.net]
- 俺ら技術屋の辛いとこだよ
新しいものはとりあえず食ってみるしかない あげくゲロマズで非常に気分が悪くなることもあるが怖がってらんない
- 335 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:59:15.55 ID:d+bn5JZd.net]
- 技術屋というか、実用してる人は盲信はしないと思う
原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ 自分の頭で考えて使ってれば、自ずと長所も短所もわかるもんだ
- 336 名前:ハノン mailto:sage [2021/09/11(土) 14:40:07.67 .net]
- >>311
人を選ぶジョークとはまさに >>242 のことだったんですね‥‥ 今回は勉強させていただきました
- 337 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 15:50:05.22 ID:pU9Ou8D7.net]
- 分かったら二度とデマ流すなよ
ワクチンにマイクロチップだのどこそこの銀行が潰れるだの朝鮮人が井戸に毒入れただのもだぞ 本人は軽いジョークのつもりでも、デマとして流行したら人が死ぬんだからな
- 338 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 18:07:47.03 ID:ke/Tkn8S.net]
- > 原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ
ほんこれ
- 339 名前:デフォルトの名無しさん [2021/09/11(土) 21:27:01.30 ID:3OqmYb77.net]
- そうはいってもC言語規格にfinally機構があったら便利なはず
PGが規格追加に後ろ向きになってしまうのはコンパイラの対応が信頼できるレベルになるまで時間がかかる不快な経験を積んできたから
- 340 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:45:47.80 ID:mopEDxb+.net]
- デストラクタもないC言語にfinallyだけあってもねぇ…
- 341 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:55:48.31 ID:x2ZLDQix.net]
- じゃあC#使えで……
- 342 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:59:46.39 ID:3OqmYb77.net]
- >>329
デストラクタがないからこそfinallyで資源解放処理を呼び出す需要があるともいえるんだけど
- 343 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:14:53.27 ID:rQxvOqzv.net]
- >>331
実際に書いてみたらわかると思うけどどこからfinallyに来るのかわからないから解放処理書くのはけっこう大変だぞ
- 344 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:44:38.83 ID:3OqmYb77.net]
- どこから来るかわからないのはgotoも同じ
- 345 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:51:49.85 ID:6kN4WIJa.net]
- だからたいして楽にはならんよって話ね
- 346 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:54:02.48 ID:zCvRZpSn.net]
- 例外がいらんわ
必要としてるやつはC使うなよ
- 347 名前:デフォルトの名無しさん [2021/09/11(土) 23:18:46.75 ID:EO9owr6G.net]
- 関数毎に atexit かな
- 348 名前:デフォルトの名無しさん [2021/09/12(日) 01:57:56.96 ID:z8yQu9Mw.net]
- Goのdefer文でいいんじゃないか
- 349 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:03:53.61 ID:JRO5EM3e.net]
- ハノンフルボッコされて火病を起こしててワロス
自分が悪いのに逆ギレするほどみっともないことはないなあw
- 350 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:40:02.90 ID:AN8tG6su.net]
- 整形後に関数が10行以上になったらコンパイルエラーにしよう
関数名1行+開きカッコ1行+return1行+閉じカッコ1行だから実質5行までな
- 351 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:24:15.40 ID:SBMPlzna.net]
- たまにちびっこだらけのピアノ教室に一人だけ下手くそなおじさんが混ざってて臆面もなく発表会とかにも出てくるけど、それがその固定ハンドル
- 352 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 17:30:32.90 ID:d/9I2lQ9.net]
- 質問でsが
std::this_thread名前空間内の関数は、std::thread以外の手段で作ったスレッドで 実行しても大丈夫なんでしょうか、 一部のC標準ライブラリ関数みたいにスレッド起動手段次第でリークしたりすることは無い? https://cpplover.blogspot.com/2010/10/msvc.html
- 353 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:10:18.89 ID:TJh0S1vO.net]
- >>341
やってみないと分からないから自己責任でご自由にどうぞ、というのが正しい回答
- 354 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:54:34.09 ID:d/9I2lQ9.net]
- >>342
std::thread以外の手段で作ったスレッドで実行したときのふるまいは 規格上非規程ということでおk?
- 355 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:58:14.10 ID:d/9I2lQ9.net]
- 未定義動作とか処理系依存とかではなく、規定されていないということ?
- 356 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 20:27:37.58 ID:x/1IPUIX.net]
- 大丈夫なんじゃないすかね
mainはstd::thread以外の手段で呼び出されるんだし
- 357 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 21:31:25.44 ID:ewAYKYUU.net]
- どうやってアクセスするん
- 358 名前:ハノン mailto:sage [2021/09/13(月) 01:29:14.15 .net]
- >>326
米国民主党の宣伝=ロイター・ブルームバーグ=真実 米国共和党、なかんずくプレジデント・トランプの言ったこと=フェイクニュース という理解でいいでしょうか?イヴェルメクチンの話 https://www.youtube.com/watch?v=zhIg_KNfyhQ >>338 どこがフルボッコか詳しく、ジョークのわからない馬鹿一人だけが騒いでいた、という印象ですが >>340 バッハコンクール大人の部には出てみたいですね‥‥たぶんよくできる中高生のなかに一人ヨボヨボが混ざるの図になりそうですけれどもね
- 359 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 02:16:31.80 ID:ZygXXNwA.net]
- >>347
コンクールとは無縁の音楽歴だろうがクソバカが 見栄張んなよ 精々弱小音楽教室の発表会止まり
- 360 名前:デフォルトの名無しさん [2021/09/13(月) 03:47:26.34 ID:PttYpQoG.net]
- わかるよ
C++とはつまりCから2キー(2半音)上げたDという意味 ピアノならCはドでDはレ
- 361 名前:デフォルトの名無しさん [2021/09/13(月) 04:01:44.26 ID:PttYpQoG.net]
- このスレにMIDIエンジンを自分で作ったことある人、どのくらいいる?
- 362 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 06:59:19.04 ID:ZygXXNwA.net]
- ピアノじゃなくても「CはドでDはレ」だと思うが……
- 363 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:04:19.91 ID:B8QV0Pmm.net]
- MDLを入力してWAVを出力するコンパイラみたいのなら
- 364 名前:デフォルトの名無しさん [2021/09/13(月) 07:13:59.03 ID:PttYpQoG.net]
- >>351
思うだけならあなたの自由だから好きにしなさい
- 365 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:15:10.48 ID:OJvNe7+i.net]
- >>351
世の中には移調楽器って言うものがあって、例えば普通によく見かけるトランペットはドの音はB♭だったりする
- 366 名前:デフォルトの名無しさん [2021/09/13(月) 07:16:20.40 ID:PttYpQoG.net]
- Windowsの標準システムドライブがCであることの経緯を知らないでPGやってる人、どのくらいいる?
- 367 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:50:09.00 ID:B8QV0Pmm.net]
- UNIXから一歩も離れたくない人とか?
- 368 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:56:33.80 ID:9W3p606T.net]
- aとbドライブがフロッピー
- 369 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:59:56.78 ID:B8QV0Pmm.net]
- かつて日本ではAがHDDだった
- 370 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:28:48.75 ID:Kz73eSbE.net]
- >>350
SWFreaderのこと? SoftwareSynthesizerのこと?
- 371 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 12:01:25.13 ID:DUyA86Uv.net]
- MIDIなんてPC-98以前のFM音源搭載機でしかいじらなかった
MIDIドライバとかならともかくMIDIエンジンが何なのかよく分からない
- 372 名前:ハノン mailto:sage [2021/09/13(月) 13:47:19.19 .net]
- >>348
スレチガイも大概だからここで終わりましょうか バッハコンクール https://www.bach-concours.org/p/about.html 趣旨「J.Sバッハの作品はクラシック音楽の真髄、導入期からポリフォニー音楽や舞曲に親しみ、ピアノの学習の中に取り入れて、そしてレパートリーにしていただきたい」、おっしゃるとおり誰でも参加可能です https://matsuri.5ch.net/test/read.cgi/piano/1488364000/ バッハはこんな曲を作った人:https://www.youtube.com/watch?v=SBWGgwzcjYc 確かアニメ監督の押井守は若い頃バッハの合唱団にいたと聞いています
- 373 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 19:44:06.04 ID:O/wDGHc8.net]
- >>361
スレ違いはお前一人なんだが・・・
- 374 名前:デフォルトの名無しさん [2021/09/15(水) 11:32:22.49 ID:0GWRKP/3.net]
- 関数のポインタを引数で受け取る関数に
予め定義した関数のポインタの代わりに lambda関数のポインタを渡したいとき どう書けばよいですか?
- 375 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:43:21.99 ID:KsZNjWDc.net]
- >>363
ラムダ式を呼び出すラッパー関数を作って、その関数ポインタを渡す
- 376 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:57:59.21 ID:tjq2eHQi.net]
- std::functionでええやろか?
- 377 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:01:19.03 ID:+suq2kti.net]
- >>363
こういうこと? void func1(void (*arg)()) { arg(); } template <std::invocable F> void func2(F arg) { arg(); } int main() { func1([]{}); func2([]{}); }
- 378 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:57:52.48 ID:gM7DTPzC.net]
- >>363
違うかも知れんけど、関数ポインタとラムダと型推論でなんかハマってこの記述に落ち着いた。 ttps://ideone.com/UNUgdi
- 379 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 13:01:11.97 ID:/JHaU2Oz.net]
- >>363
クロージャ (ラムダ式によって作られた関数オブジェクト) は周囲の変数をキャプチャしないときに限り関数ポインタに変換可能。 https://timsong-cpp.github.io/cppwp/n3337/expr#prim.lambda-6 逆に言えばそうでないときは関数ポインタと互換性はない。 受け取る側が関数ポインタとして受け取るという前提を動かせないのであれば 渡すラムダ式のほうをキャプチャしない形にしてくださいということになるし、 汎用的にラムダ式を受け取れるようにしたいのだということであれば >>365-366 という方法をとることになる。
- 380 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:03.04 ID:0GWRKP/3.net]
- >>366
template<typename F> void func2(F arg) { arg(); } int main() { func2([]{}); } ↑ これだと動いています void func1(void (*arg)()) { arg(); } int main() { func1([]{}); } ↑ やりたいのはこっちだったんですがこれはコンパイルエラーになりますた # invocable は C++20 からみたいですね 目的にあってるかどうか判りませんが試す環境が今無いので後回しです
- 381 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:45.58 ID:0GWRKP/3.net]
- >>368
ああなるほど [&] してたのが原因かも知れません ありがとうございます
- 382 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 13:22:34.75 ID:+suq2kti.net]
- そういうオチか
- 383 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:27:00.87 ID:46YA8/2z.net]
- >>369
ヒント: コンセプト
- 384 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 21:11:24.40 ID:wgmfJty/.net]
- 単項+が意味を持つ例のやつか
- 385 名前:デフォルトの名無しさん [2021/09/17(金) 16:40:49.64 ID:J/w/zJeW.net]
- 仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない… https://www.youtube.com/watch?v=zkwQOdq17dI 【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの? https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s 【ひろゆき】社会人語っちゃうサラリーマンについて語りました https://www.youtube.com/watch?v=pX7NHj_rIBg 奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】 https://www.youtube.com/watch?v=evQjCUWIHV4 【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見! https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s 【ひろゆき】日本のサラリーマン制度...終わってますよwww https://www.youtube.com/watch?v=Y-30zk2zDn0 【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき https://www.youtube.com/watch?v=cMjk9B4J2n4 【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい? https://www.youtube.com/watch?v=5cS7vyb0tfE
- 386 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:55:20.00 ID:fzYJNrfO.net]
- 聞いてくれウィンドーズ10で
GetLocalTime(&st1); const system_clock::time_point now = system_clock::now(); GetLocalTime&(st2); とした後に、nowから const time_t tt = system_clock::to_time_t(tp); auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000; としてnowのms単位のUNIX Timeを算出したらば、 st1 ≦ now は当然成立しているが、 now ≦ st2 は成立しないことがあり、何か now ≦ st2 + 1 なんじゃわ;;; 何で?!
- 387 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:57:50.95 ID:fzYJNrfO.net]
- 処理系はMSVC2019でつ、
duration_cast<T>はTで指定した時間単位未満は切り捨てとC++の規格で決まっているはず……
- 388 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:05:15.92 ID:fzYJNrfO.net]
- ちなみにst1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから
おかしいのは明らかにstd::chronoの方、
- 389 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:23:54.83 ID:I+biH5jK.net]
- >>377
これだけじゃどっちがおかしいかは分からんでしょ GetLocalTimeが正しいと思うからGetLocalTimeでsystem_clock::nowを挟んだんじゃないかい
- 390 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:43:19.07 ID:fzYJNrfO.net]
- >>378
>>377のは時刻のキャッシングみたいなことをしており呼び出した瞬間の時刻を返していないとしたらそれはGetLocalTime()の方ではない、という証左 つなみにマルチコアと最適化(いやしくもAPIの呼び出しがあるのであり得ないが)とプリエンプションの合わせ技で 実行順序が変になり得るかも、みたいな被害車妄想で GetLocalTime(&st1); const system_clock::time_point now = system_clock::now(); _ReadWriteBarrier(); GetLocalTime&(st2); としてみたが>>377な現象は変わらんかったは、
- 391 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:48:57.22 ID:vjp4M7Ow.net]
- windowsのAPI同士で比較しろ
一般に違うAPIを使ってるなら一貫した結果にならなくてもおかしくない
- 392 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:53:59.82 ID:I+biH5jK.net]
- ちゃんと知りたいならsystem_clock::nowが内部でどのAPIを呼んでいるのか調べてみては
- 393 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:58:54.14 ID:EqZgRVmV.net]
- 変数tpはなにものですか
- 394 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 14:01:55.85 ID:EqZgRVmV.net]
- というか% 1000っておかしくね???
- 395 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:12:35.69 ID:EWVuImUN.net]
- >>375
お前の頭がおかしいんだよ
- 396 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:47:53.30 ID:hcp/HEe5.net]
- 不等号≦への理解、間違ってないか
- 397 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 07:30:37.33 ID:CNUd2o2A.net]
- unsignedとintを比較してるとかどうせそういうオチだろ
- 398 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 13:12:19.06 ID:/yxUr6Cy.net]
- 中途半端なコード
- 399 名前:セけチラ見せされてもな
再現する完全なコードを出せとしか [] - [ここ壊れてます]
- 400 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:50:35.11 ID:neurUQ4a.net]
- >>386
天才なのでそんなヘマはしますしません、 >>387 再現コード貼る、 https://ideone.com/GeMebI ※ 冒頭コメントの通り、非Windows環境では現象再現しないコードなのので注意 ウィンドーズでの実行結果: i=---: st1, chrono, st2: ORDER CHECK i= 0: 1632034143228, 1632034143228, 1632034143228: OK. i= 1: 1632034143229, 1632034143229, 1632034143229: OK. i= 2: 1632034143229, 1632034143229, 1632034143229: OK. i= 3: 1632034143229, 1632034143230, 1632034143229: NG! i= 4: 1632034143229, 1632034143230, 1632034143229: NG! i= 5: 1632034143230, 1632034143230, 1632034143230: OK. i= 6: 1632034143230, 1632034143230, 1632034143230: OK. i= 7: 1632034143230, 1632034143231, 1632034143230: NG! i= 8: 1632034143230, 1632034143231, 1632034143230: NG! i= 9: 1632034143230, 1632034143231, 1632034143230: NG! ==> ORDER CHECK 「NG!」のところでchrono > st2 になっており、chronoのtime_pointがSYSTEMTIMEを1 msだけ追い越している
- 401 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:57:36.84 ID:neurUQ4a.net]
- こっそり訂正するが、>>377で
>st1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから と言ったがな、ありゃ誤報だスマンカッタ、 あとちなみに、>>375を書いた時点では、現象再現はFILETIMEを使わずに、以下の方法で、 SYSTEMTIMEと ( (time_point - epochタイム) を tm構造体に変換したもの、の それぞれからから直接シリアル日時を出して比較すた、 year * (12 * 31 * 24 * 60 * 60 * 1000) + month * (31 * 24 * 60 * 60 * 1000) // 一ヵ月の日数を31固定で換算しているが、大小比較目的なのでこれで問題無い。 + day * (24 * 60 * 60 * 1000) + hour * (60 * 60 * 1000) + minute * (60 * 1000) + second * (1000) + millisecond
- 402 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:10:18.78 ID:HwX1dH8g.net]
- まともに読んでないがバリアの使い方がおかしくて実行順序入れ替わってるとかじゃね??
- 403 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:33:01.30 ID:neurUQ4a.net]
- >>390
(1) _ReadWriteBarrier()は最強のバリアーやぞ;;; (2) GetLocalTime()がどんな副作用を持つ関数かコンパイラが知るはずは無いのだから 最適化でコードの入れ替えや変数のレジスタ割り当てしっぱなしということはあり得ない (3) ていうかそれ以前に、GetLocalTime()やstd::chronoの呼び出し元がシングルスレッドなのだから それで順序がおかしくなるとかCPUがおかしいか、スレッドをプリエンプトして再びディスパッチする際に 別のコアに実行させようとする際にOSがヘマしているかのどちらかという話に…… ちなみに漏れは正常動作しており、本人が言うのだから間違いない
- 404 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:39:43.92 ID:k8GedCcQ.net]
- https://gist.github.com/t-mat/3763854
Windows10ならSYSTEMTIMEよりsystem_clockのほうが精度高そうですね
- 405 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 17:02:40.43 ID:nkVr2ypq.net]
- >>375
GetLocalTime の分解能は 10ms くらいっぽいぞ。 system_clock::now がもっと精度の高い API を使っていたら そんくらいの前後はあってもおかしくないんじゃね。
- 406 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:17:42.61 ID:k8GedCcQ.net]
- https://ideone.com/qA5yOL
system_clockの部分を生のFILETIMEで置き換えてみた 実行結果はこんな感じ i= 0: 132765453416200000, 132765129416213861, 132765453416200000: NG! i= 1: 132765453416210000, 132765129416218094, 132765453416210000: NG! i= 2: 132765453416210000, 132765129416218837, 132765453416210000: NG! i= 3: 132765453416210000, 132765129416219530, 132765453416210000: NG! GetLocalTimeやめたら?
- 407 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:28:49.56 ID:UeoKc9fZ.net]
- 時刻取得用のAPIをパフォーマンス計測用に使っちゃったんだね
WIN32では大昔からQueryPerformanceFrequencyとQueryPerformanceCounterを使うよ https://docs.microsoft.com/en-us/windows/win32/api/profi
- 408 名前:leapi/ []
- [ここ壊れてます]
- 409 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:59:29.70 ID:UeoKc9fZ.net]
- 時刻取得でそのまま精度を上げるAPIとしては
GetSystemTimePreciseAsFileTime https://docs.microsoft.com/ja-jp/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime ただしWindows 8以降。それ以前だと以下を使うしかないっぽいね。 GetSystemTimeAsFileTime std::system_time::nowの実装としては、_Xtime_get_ticksを使用している(2021年9月21日17:57JST現在) https://github.com/microsoft/STL/blob/main/stl/inc/chrono#L663-L665 これが使用しているAPIについて聞いたStackoverflowの質問 https://stackoverflow.com/questions/54933940/what-clock-does-the-visual-studio-2017-crt-implementation-of-stdchronosystem 上記によると最初に書いたAPIである模様
- 410 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:46:00.85 ID:neurUQ4a.net]
- >>393
GetLocalTime()の精度が10 ms台だというのは Windowsのデフォルトのスレッドへの最大ディスパッチ時間15.6 ms(PCによっては10 ms)の影響が混入している可能性、 >>392のリンク先のような計測方法をとった場合、計測中に他のスレッドに実行権を横取りされたりすると、どうしても 期待する時間に対して15.6 msとか(高優先のスレッドが相次いでディスパッチされた場合はあるいはもっと)実際の時間が大きくなる 一方>>375の計測方法は時間の順序にのみ注目しており、プリエンプションの影響を受けない(はずだった この話に猜疑があるなら後で述べる >>392 >>392の情報提供はdクスやし実際乗り換えようかと考えているが、それはそうとして、std::chronoのふるまいを検証しなくて委員会?
- 411 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:05:49.20 ID:neurUQ4a.net]
- というわけでms単位のUNIX timeを得るにあたってstd::chronoとGetFileTimeAsSystemTime()が同じ精度であり互換であることを
直接検証すた、 https://ideone.com/9Opqj9 実行結果(Windows 10) i=---: st1, chrono, st2: ORDER CHECK i= 0: 1632049473157, 1632049473157, 1632049473157: OK. i= 1: 1632049473158, 1632049473158, 1632049473158: OK. i= 2: 1632049473159, 1632049473159, 1632049473159: OK. i= 3: 1632049473159, 1632049473159, 1632049473159: OK. i= 4: 1632049473159, 1632049473159, 1632049473159: OK. i= 5: 1632049473159, 1632049473159, 1632049473159: OK. i= 6: 1632049473159, 1632049473159, 1632049473159: OK. i= 7: 1632049473159, 1632049473159, 1632049473159: OK. i= 8: 1632049473160, 1632049473160, 1632049473160: OK. i= 9: 1632049473160, 1632049473160, 1632049473160: OK. NG times=0/10 問題無くなったやたー
- 412 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:13:38.40 ID:neurUQ4a.net]
- >>393
GetSystemTime()は確かに根本的に精度悪かったスマンカッタorz この結果からすると、ウィンドーズのシステム時間のの実装は、 OSがプリエンプトした際に更新し、ディスパッチ中は値が変わらないというしくみな可能性が大きい ※ 取得時間の間隔が15.6 msの倍数にならないのは、15.6 msというのがあくまで1津のスレッドが ディスパッチされてからプリエンプトされるまでの「最大」時間であって実際は高優先のやつに横取りされたり 自発的に待ちに入ったりで15.6 msより小さい時間で実行権をOSに返すからだと思う
- 413 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:46:58.47 ID:UeoKc9fZ.net]
- 古いWIN32開発者には常識的な話で検証の必要もなく、実際に検証用のプログラムは昔から大量に作られてるからだと思う
取得時間の間隔が15.6 msの倍数にならないのは「主に16ビット Windows との下位互換性のため」 https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/windows-time
- 414 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:17:24.32 ID:k8GedCcQ.net]
- >>400
後半って「Windows時刻」の説明だよね? GetSystemTimeで得られるのは「システム時刻」であって、また別の時刻体系だと読んだけど間違ってる? https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/system-time WinAPIスレに持っていったほうがいいかもな
- 415 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:38:35.16 ID:UeoKc9fZ.net]
- >>401
大元はWindows3.1時代からあったGetTickCountだと思うんだけど、説明的にそこしかなかったから書いた WinAPIスレで聞きたければどうぞ
- 416 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:06:39.19 ID:luBeUSFz.net]
- 周期15.6 msを下位互換性のために新しいWindowsがエミュレートしているというのはありえない
1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、 hp.vector.co.jp/authors/VA007219/rtc_pic.html だいたい設定でも変わるし、 https://atmarkit.itmedia.co.jp/ait/articles/1410/30/news150_2.html (スレッドのクォンタムタイム) 取得間隔が15.6 msにならない理由は>>399で説明いしたし
- 417 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:10:20.87 ID:luBeUSFz.net]
- で、GetTickCount()の分解能かきちり1 msであることはビジーループ的に値をとってみたらワカル
分解能に関して後方互換性も糞もなく昔からそいうブツのはず 多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ
- 418 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:25:55.12 ID:luBeUSFz.net]
- と思って、
const int N = 10; std::vector<DWORD> vec; DWORD curTmg = GetTickCount(); DWORD prevTmg; while (vec.size() < (size_t)N) { prevTmg = curTmg; curTmg = GetTickCount(); if (prevTmg != curTmg) { vec.push_back(curTmg); } } for (int i = 0; i < N; i++) { (差分vec[i] - vec[i-1]をprint) } というのをやったら、
- 419 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:26:50.20 ID:luBeUSFz.net]
- vec[0]=1391507593
vec[1]=1391507609 (diff=16) vec[2]=1391507625 (diff=16) vec[3]=1391507640 (diff=15) vec[4]=1391507656 (diff=16) vec[5]=1391507671 (diff=15) vec[6]=1391507687 (diff=16) vec[7]=1391507703 (diff=16) vec[8]=1391507718 (diff=15) vec[9]=1391507734 (diff=16) やったわorz まつがえますたすみません;;; 勉強になるなあ、
- 420 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 06:12:36.98 ID:DnvAIBnA.net]
- >>402
自己レスです GetTickCountとGetLocalTimeとGetSystemTimeの分解能調査 https://ideone.com/wKC8DA 1000回値が変わるのにかかった時間をマイクロ秒で計測した(std::chrono::high_resolution_clock::now()で計測) PS C:\> .\ConsoleApplication8.exe 15614998 1003946 1000238 PS C:\> .\ConsoleApplication8.exe 15621414 1001066 1001218 PS C:\> 結論: GetLocalTimeは約1秒なのでこの環境(Win10+ハード)では1ms程度の分解能がある 感想: 誤差大きい
- 421 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:46:32.11 ID:Pqsh6MJQ.net]
- ここはWindowsAPIスレになったのか
|

|