C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
探検
C++相談室 part145
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/09/13(金) 17:13:24.60ID:/ygW08Jq473デフォルトの名無しさん
2019/10/14(月) 16:48:34.42ID:REdvl5Gt >>471
>そのくせにdoubleからintなどの変換をしてくれないので
この点に関しては、以下の拡張展開でいけるはず。
template<typename... T>
Test(T... args):m{((int)args)...}{
}
>そのくせにdoubleからintなどの変換をしてくれないので
この点に関しては、以下の拡張展開でいけるはず。
template<typename... T>
Test(T... args):m{((int)args)...}{
}
474デフォルトの名無しさん
2019/10/14(月) 16:55:25.15ID:REdvl5Gt templateの「非型引数」を使えば、理論上は、
template<int...args>
Test(int...args):m{args...}{
}
と書ける可能性はあるかもしれないけど、試してみてないので分からない。
template<int...args>
Test(int...args):m{args...}{
}
と書ける可能性はあるかもしれないけど、試してみてないので分からない。
475デフォルトの名無しさん
2019/10/14(月) 17:04:44.38ID:REdvl5Gt C++11 から、template 仮引数(パラメーター)に非型パラメーターパックが使える。
分かっているとは思うけど、このパックとは可変長引数をまとめて入れる容器の様な意味。
実際にやってみてないのでわからない。
https://en.cppreference.com/w/cpp/language/template_parameters
【Non-type template parameter】
type ... name(optional) (3) (since C++11)
3) A non-type template parameter pack with an optional name.
分かっているとは思うけど、このパックとは可変長引数をまとめて入れる容器の様な意味。
実際にやってみてないのでわからない。
https://en.cppreference.com/w/cpp/language/template_parameters
【Non-type template parameter】
type ... name(optional) (3) (since C++11)
3) A non-type template parameter pack with an optional name.
476デフォルトの名無しさん
2019/10/14(月) 17:48:47.38ID:DdI7aqm2 >>466
要素数がコンパイル時に決まってるなら std::array 使って Test<3> x{{1,2,3}} とすることは簡単にできそう。
要素数がコンパイル時に決まってるなら std::array 使って Test<3> x{{1,2,3}} とすることは簡単にできそう。
478デフォルトの名無しさん
2019/10/16(水) 00:49:52.16ID:4OT/K/L6 >>473 Thank you!!
479デフォルトの名無しさん
2019/10/18(金) 03:20:02.11ID:kbBE7aSe 他クラスのメンバ関数テンプレートを呼び出すときってtemplateキーワードを関数名の前に付けないと
operator<と間違われてエラーになりますですよね?具体的に例をあげてみますと
https://wandbox.org/permlink/F7zl1fDh3qc216hd
これの t.template func<T2>(); のところですが、実はこのtemplateキーワードを外しても
WindowsのVisualStudioだとコンパイルが通ってしまいます。
これってVisualStudioが規約違反しているという理解で合っていますか?
operator<と間違われてエラーになりますですよね?具体的に例をあげてみますと
https://wandbox.org/permlink/F7zl1fDh3qc216hd
これの t.template func<T2>(); のところですが、実はこのtemplateキーワードを外しても
WindowsのVisualStudioだとコンパイルが通ってしまいます。
これってVisualStudioが規約違反しているという理解で合っていますか?
480デフォルトの名無しさん
2019/10/18(金) 03:32:35.18ID:L8qU11hp vsのバージョンは?
2017の途中からtwo phaseに対応しだしてtemplate周りの怪しい挙動は大分改善された
2017の途中からtwo phaseに対応しだしてtemplate周りの怪しい挙動は大分改善された
481デフォルトの名無しさん
2019/10/18(金) 11:35:03.93ID:kGqx1xn0 >>480
Express 2017 for Windows DesktopとProfessional 2019で確認しています
準拠モードを「はい」にしたら標準の規約に従うのかと思ったんですが変化なしでした
開発はWindowsでしつつもWindowsとLinuxどちらでもコンパイルできるようにしたいんですが
もしかしてそう簡単な話ではないんですかね
Express 2017 for Windows DesktopとProfessional 2019で確認しています
準拠モードを「はい」にしたら標準の規約に従うのかと思ったんですが変化なしでした
開発はWindowsでしつつもWindowsとLinuxどちらでもコンパイルできるようにしたいんですが
もしかしてそう簡単な話ではないんですかね
482デフォルトの名無しさん
2019/10/18(金) 12:11:07.40ID:8CoI4J3v >>481
visual studio cmakeプロジェクトでググる
visual studio cmakeプロジェクトでググる
483デフォルトの名無しさん
2019/10/18(金) 15:49:49.04ID:/qIwU54Z effective modern c++のnoexceptの項読んで思ったんだが、
C++の関数内でCの関数(具体的にはOpenGLとか)を呼び出した時に
C++側でcatchできる例外って具体的にどんなものがあるの?
試したことないけどmalloc失敗でbad_allocは飛ばないよね?
C++の関数内でCの関数(具体的にはOpenGLとか)を呼び出した時に
C++側でcatchできる例外って具体的にどんなものがあるの?
試したことないけどmalloc失敗でbad_allocは飛ばないよね?
484デフォルトの名無しさん
2019/10/18(金) 18:57:22.15ID:eJANlQqR Windowsなら構造化例外とか
485デフォルトの名無しさん
2019/10/18(金) 19:16:01.68ID:rTjJuJDg486デフォルトの名無しさん
2019/10/18(金) 19:19:00.58ID:5559SrY6 VCコンパイラがWindows専用だからcmakeだけでは解決しない
clangオプション使えばいけるんじゃね
clangオプション使えばいけるんじゃね
487デフォルトの名無しさん
2019/10/18(金) 19:27:02.65ID:BPo3Wxa0 cmakeってなんとなくしか使ってないんですけど何なんですか
OpenCVのソースをビルドするときに使いましたけど、cmakeした後にまたVisual Studioでコンパイルする必要があるのはなぜですか
OpenCVのソースをビルドするときに使いましたけど、cmakeした後にまたVisual Studioでコンパイルする必要があるのはなぜですか
488デフォルトの名無しさん
2019/10/18(金) 21:38:24.25ID:1VxWd/yq489デフォルトの名無しさん
2019/10/18(金) 22:32:33.72ID:HsDKWWc7 >>487
ビルドするためのスクリプトを作るツール、みたいに考えるといいよ
linux環境ならLinux用のものを作ってくれる
makeだと基本はlinux専用だし、.slnや.vcxprojはwindows専用だから、両方を面倒見るのは大変でしょ
ビルドするためのスクリプトを作るツール、みたいに考えるといいよ
linux環境ならLinux用のものを作ってくれる
makeだと基本はlinux専用だし、.slnや.vcxprojはwindows専用だから、両方を面倒見るのは大変でしょ
490デフォルトの名無しさん
2019/10/18(金) 22:48:18.41ID:f2FG8XiO ビルドするためのスクリプトを作るためのスクリプトを作るためのスクリプトなんてよくある話だよ。
491デフォルトの名無しさん
2019/10/18(金) 22:49:57.04ID:a3uRi/Ig 秘伝のタレな
492デフォルトの名無しさん
2019/10/18(金) 23:06:23.18ID:liCy40EB GNU autotoolsをまともにいじる輩は消え去ったという現実をcmakeも味わうことになる。
バカは同じ間違いをする。歴史も見ずに。
バカは同じ間違いをする。歴史も見ずに。
493デフォルトの名無しさん
2019/10/19(土) 00:19:02.04ID:JKxr+RAJ CMakeってKitwareっていう大学発ベンチャーから出てきたやつだよな
もとはVTKとか可視化用ライブラリ開発してるしがないベンチャーだったのに
CMakeのおかげでやたら顔が知られるようになった
もとはVTKとか可視化用ライブラリ開発してるしがないベンチャーだったのに
CMakeのおかげでやたら顔が知られるようになった
494デフォルトの名無しさん
2019/10/19(土) 00:40:35.72ID:kiA3Djjo VTKとparaviewの方が有名じゃなかったのか
495デフォルトの名無しさん
2019/10/19(土) 00:44:42.31ID:JKxr+RAJ ParaViewは最近になって有名になってるけど所詮はVTKのラッパーでしょ
CMakeのほうが影響度はでかいと思う
ベンチャーでここまでやれたなら大成功な事例だね
CMakeのほうが影響度はでかいと思う
ベンチャーでここまでやれたなら大成功な事例だね
496デフォルトの名無しさん
2019/10/19(土) 00:58:43.11ID:kiA3Djjo cmakeより前から有名じゃね?
497デフォルトの名無しさん
2019/10/19(土) 01:00:35.87ID:4XSJxZBk cmake邪魔くさい
Makefile.am, configure.acからautoreconfしてconfigure作る方が楽。
windows用もmingwでクロスビルドしちゃえば楽だし。
WSLでwindowsからも見えるパスでビルドすると作ったwindows用binaryをすぐに起動できるしいうことなし
Makefile.am, configure.acからautoreconfしてconfigure作る方が楽。
windows用もmingwでクロスビルドしちゃえば楽だし。
WSLでwindowsからも見えるパスでビルドすると作ったwindows用binaryをすぐに起動できるしいうことなし
498デフォルトの名無しさん
2019/10/19(土) 01:28:27.26ID:kDntEbbb mingw使わずに標準のwindowsの環境で使えるようになってから出直してきて
499デフォルトの名無しさん
2019/10/19(土) 01:36:12.28ID:+xsHXYvs mesonいいぞー
500デフォルトの名無しさん
2019/10/19(土) 01:37:16.21ID:JKxr+RAJ makeとかのビルドツールって超重要なはずなのにおざなりな状況になってるのは不思議だ
なんとかしてくれ
なんとかしてくれ
501デフォルトの名無しさん
2019/10/19(土) 01:49:35.75ID:kiA3Djjo クロスプラットフォームなソフト作るにしても、成果物が対象の環境で動けば良い訳で、ビルドをどの環境でも出来ることにそれほど意味はないからね
てかunix系でgccやclang使って開発しているものをVCに入れても謎の独自仕様でコンパイルできないとかザラだしね
てかunix系でgccやclang使って開発しているものをVCに入れても謎の独自仕様でコンパイルできないとかザラだしね
502デフォルトの名無しさん
2019/10/19(土) 04:05:50.65ID:kDntEbbb >>500
そう言って立ち上がった人は100億人くらいいたが誰一人として帰ってくる者はいなかった
そう言って立ち上がった人は100億人くらいいたが誰一人として帰ってくる者はいなかった
503デフォルトの名無しさん
2019/10/19(土) 04:25:19.36ID:Qviva8VV >>502
ほんとこれw
ほんとこれw
504デフォルトの名無しさん
2019/10/19(土) 07:26:21.05ID:4XSJxZBk >>498
wslでmingwクロス環境はマクソ提供だけど
wslでmingwクロス環境はマクソ提供だけど
505デフォルトの名無しさん
2019/10/19(土) 09:24:58.31ID:wYu0/eCZ あらゆるビルドツールは怪獣化して、怪獣を飼いならすためのラッパーが必要になり、そしてそのラッパーももれなく怪獣化する
歴史が証明しており例外はない
歴史が証明しており例外はない
506デフォルトの名無しさん
2019/10/19(土) 09:25:25.42ID:WQwZNfDO 会社でifstreamのファイルオープンがエラーになるのはなぜなのか不明。assert()で引っかかる。
Visual Studio 2008コマンドプロンプトでコンパイルしたプログラムで、コードは単純化
して示したものが下記のようなもの。
std::ifstream ifs1;
for (n = 0; n < 8; ++n) {
ifs1.open(s[n].c_str());
assert(ifs1); // もしくはassert(ifs1.is_open());
関数(ifs1);
ifs1.close();
ifs1.clear();
}
コーディング上に間違いがあるのかいな。ファイルが使用中のためにエラー
でもないようだし。
よくわからんからCのFILE *に変更して対処したけどコンパイラの欠陥か。
ifstreamを宣言した後に ifs1.clear(); が必要なのか。
Visual Studio 2008コマンドプロンプトでコンパイルしたプログラムで、コードは単純化
して示したものが下記のようなもの。
std::ifstream ifs1;
for (n = 0; n < 8; ++n) {
ifs1.open(s[n].c_str());
assert(ifs1); // もしくはassert(ifs1.is_open());
関数(ifs1);
ifs1.close();
ifs1.clear();
}
コーディング上に間違いがあるのかいな。ファイルが使用中のためにエラー
でもないようだし。
よくわからんからCのFILE *に変更して対処したけどコンパイラの欠陥か。
ifstreamを宣言した後に ifs1.clear(); が必要なのか。
507デフォルトの名無しさん
2019/10/19(土) 09:50:39.86ID:wYu0/eCZ ifsreamってcloseの後に再使用できる保証あったっけ?
ifs1の宣言をfor文の中に入れて毎回オブジェクト作り直す方が無難に見える
ifs1の宣言をfor文の中に入れて毎回オブジェクト作り直す方が無難に見える
508デフォルトの名無しさん
2019/10/19(土) 09:51:32.93ID:wYu0/eCZ 宣言じゃないや定義
509デフォルトの名無しさん
2019/10/19(土) 09:54:59.18ID:Xn59Im0u makeが複雑なんじゃなくて
多様な環境すべてに対応するように書くことが複雑なわけで。
だったらdockerなり使って一つの環境だけでの提供を考える方が楽。
多様な環境すべてに対応するように書くことが複雑なわけで。
だったらdockerなり使って一つの環境だけでの提供を考える方が楽。
510デフォルトの名無しさん
2019/10/19(土) 11:50:11.90ID:Xq/UOX2V511デフォルトの名無しさん
2019/10/19(土) 12:33:25.60ID:IyvFodwr >>484
あれ、Winの構造化例外ってそもそもtry..catchには引っかからなかったような……
あれ、Winの構造化例外ってそもそもtry..catchには引っかからなかったような……
512デフォルトの名無しさん
2019/10/19(土) 12:41:43.65ID:IyvFodwr513デフォルトの名無しさん
2019/10/19(土) 13:51:45.42ID:2wK0PqU+ C++でv8のjavascriptを使うために
インストールしようと色々やってるんだけどどうにもうまく行かない。
https://qiita.com/mofumonta/items/ef3d890e13a7c1701748
このサイトを参考にしながら進めてるんだけど
「depot-toolsインストール」の環境変数を通す項目で
C:\v8\depot_tools\win_tools-2_7_6_bin\python\bin
このパスがダウンロードしてきたdepot-toolsにはないんだけど、
どこにあるか誰か知りませんか?
スレチだったらごめんなさい。
インストールしようと色々やってるんだけどどうにもうまく行かない。
https://qiita.com/mofumonta/items/ef3d890e13a7c1701748
このサイトを参考にしながら進めてるんだけど
「depot-toolsインストール」の環境変数を通す項目で
C:\v8\depot_tools\win_tools-2_7_6_bin\python\bin
このパスがダウンロードしてきたdepot-toolsにはないんだけど、
どこにあるか誰か知りませんか?
スレチだったらごめんなさい。
514デフォルトの名無しさん
2019/10/19(土) 14:48:33.14ID:g7gJ/kc1 おま環
何をダウソしたかくらいは書け
何をダウソしたかくらいは書け
515デフォルトの名無しさん
2019/10/19(土) 15:03:15.21ID:g7gJ/kc1 python2.7 が既に入ってるなら
その bin に path 通しとけば良いんかな
その bin に path 通しとけば良いんかな
516デフォルトの名無しさん
2019/10/19(土) 15:14:23.88ID:Q3nSZoDU >>483
C の関数が呼び出すコールバックを C++ で書いた場合、環境によってはコールバックからの例外が
C の関数を通過してくる。環境によっては通過できずに terminate() するけど。
厳密に「Cの関数」じゃなくなるけど qsort(), bsearch() については例外が通過できるものと規定されている。
あとは未定義動作となる場合の反応として例外が飛んでくることはあるかもしれない。
C の関数が呼び出すコールバックを C++ で書いた場合、環境によってはコールバックからの例外が
C の関数を通過してくる。環境によっては通過できずに terminate() するけど。
厳密に「Cの関数」じゃなくなるけど qsort(), bsearch() については例外が通過できるものと規定されている。
あとは未定義動作となる場合の反応として例外が飛んでくることはあるかもしれない。
517デフォルトの名無しさん
2019/10/19(土) 15:22:29.09ID:2wK0PqU+ >>514
忘れてた。スマヌ。
Windows10 X64
Visual Studio Community 2019
Python 3.7.4(64-bit)
Git version 2.23.0.windows.1
ダウンロードしたのは
https://chromium.googlesource.com/chromium/tools/depot_tools.git
ここから「x64 Native Tools Command Prompt for VS 2019」
で「git clone」を使ってダウンロードしました。
>>515
python自体のbinフォルダは試してませんでした。
ちょっとやってみます。
忘れてた。スマヌ。
Windows10 X64
Visual Studio Community 2019
Python 3.7.4(64-bit)
Git version 2.23.0.windows.1
ダウンロードしたのは
https://chromium.googlesource.com/chromium/tools/depot_tools.git
ここから「x64 Native Tools Command Prompt for VS 2019」
で「git clone」を使ってダウンロードしました。
>>515
python自体のbinフォルダは試してませんでした。
ちょっとやってみます。
518デフォルトの名無しさん
2019/10/19(土) 15:27:23.69ID:g7gJ/kc1 OS とかツールは全部違うけど
https://chromium.googlesource.com/chromium/tools/depot_tools.git
これ clone しても確かに win_tools-2_7_6_bin は無かった
https://chromium.googlesource.com/chromium/tools/depot_tools.git
これ clone しても確かに win_tools-2_7_6_bin は無かった
519デフォルトの名無しさん
2019/10/19(土) 15:29:04.62ID:ydKYIai+ 何故公式のインストール手順を読まないのか
520デフォルトの名無しさん
2019/10/19(土) 19:15:58.17ID:fDUUZQql Node.js じゃ、ダメなのか?
521デフォルトの名無しさん
2019/10/19(土) 20:05:28.35ID:+xsHXYvs >>511
なんか設定次第で引っかかるようにならなかったっけ・・・
なんか設定次第で引っかかるようにならなかったっけ・・・
522517です
2019/10/20(日) 17:45:24.74ID:njFFTJVf523蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 20:19:16.97ID:hyX4MvIl 今、YappyCamという録画ソフトを作っています。以下のソースをご覧下さい。
https://github.com/katahiromz/YappyCam/blob/master/sound.hpp
https://github.com/katahiromz/YappyCam/blob/master/sound.hpp#L125
https://github.com/katahiromz/YappyCam/blob/master/sound.cpp#L154
このSoundが音声を扱うクラスになっております。
スレッド関数Sound::ThreadProcで録音処理を行っています。
std::vector<BYTE> m_wave_dataがサウンドバッファです。
Sound::FlushDataがバッファを吐き出す関数です。
現在、SSDが主流になりつつありますが、ハードディスクでもトラブルなく使えるようにしたいです。いくつか質問します。
1.m_wave_dataをstaticな固定バッファにすべきか。するとすればどれぐらいの容量か。
2.もっといいバッファリングの方法はないか。
お願いします。
https://github.com/katahiromz/YappyCam/blob/master/sound.hpp
https://github.com/katahiromz/YappyCam/blob/master/sound.hpp#L125
https://github.com/katahiromz/YappyCam/blob/master/sound.cpp#L154
このSoundが音声を扱うクラスになっております。
スレッド関数Sound::ThreadProcで録音処理を行っています。
std::vector<BYTE> m_wave_dataがサウンドバッファです。
Sound::FlushDataがバッファを吐き出す関数です。
現在、SSDが主流になりつつありますが、ハードディスクでもトラブルなく使えるようにしたいです。いくつか質問します。
1.m_wave_dataをstaticな固定バッファにすべきか。するとすればどれぐらいの容量か。
2.もっといいバッファリングの方法はないか。
お願いします。
524蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 21:02:47.12ID:hyX4MvIl スピード命です。フレーム落ちは絶対にダメだそうです。
525デフォルトの名無しさん
2019/10/20(日) 21:06:32.98ID:I/H74RW7 古臭いスタイルはさておき・・・
(別にそれでいいと思うよ)
なぜバッファリングしてる?
vectorにためずにwriteしたらいいじゃん
readとwriteの単位が合わないとか?
バッファリングするならreader/writerで別スレッドにした方がいいかもね
オーディオの処理なんだからおれなら動的メモリ確保の走るvectorは使わないね
最悪システムコールだから音が途切れる可能性が高まる
一瞬かもしれないが音は少しでも途切れるとノイズになる
最適なバッファ量はそのルーチンがどれぐらいのジッターで駆動してか計測して決めればいい
あとバッファリングすればそれだけ遅延が発生するから注意
本来ビデオ側と同期をとる必要あるけどPCだと適当だよな
CE機器だと完璧に合わせるけど
(別にそれでいいと思うよ)
なぜバッファリングしてる?
vectorにためずにwriteしたらいいじゃん
readとwriteの単位が合わないとか?
バッファリングするならreader/writerで別スレッドにした方がいいかもね
オーディオの処理なんだからおれなら動的メモリ確保の走るvectorは使わないね
最悪システムコールだから音が途切れる可能性が高まる
一瞬かもしれないが音は少しでも途切れるとノイズになる
最適なバッファ量はそのルーチンがどれぐらいのジッターで駆動してか計測して決めればいい
あとバッファリングすればそれだけ遅延が発生するから注意
本来ビデオ側と同期をとる必要あるけどPCだと適当だよな
CE機器だと完璧に合わせるけど
526デフォルトの名無しさん
2019/10/20(日) 21:15:47.21ID:PJrfugKB COBOLのWRITE命令みたいに非同期書き込み&バッファローテーションてか?
あの当時のアホOSならともかく今どきアプリでそんなことせにゃならんか?
ベアメタルなら面白そうだけど
あの当時のアホOSならともかく今どきアプリでそんなことせにゃならんか?
ベアメタルなら面白そうだけど
527デフォルトの名無しさん
2019/10/20(日) 21:16:42.61ID:Vt7fKSBc 遅延の原因は、vector::insert()でしょ。
528デフォルトの名無しさん
2019/10/20(日) 21:24:56.14ID:akKR2ina ズらすの?
529デフォルトの名無しさん
2019/10/20(日) 21:27:13.38ID:peAHiKUT 誰がハゲやねん
530蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 22:12:11.93ID:2g822Cxo ああそうか。std::FILE/CreateFileそのものがバッファリングしてるんだ。ならば下手なバッファリングは必要ないと。
普通にI/Oすることにします。ありがとうございます。
普通にI/Oすることにします。ありがとうございます。
531蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 22:21:50.50ID:2g822Cxo std::vectorのメモリー動的確保は音声処理では不味いと。
ハードディスク環境でジッターを測定して見ないと。わかりました。
ハードディスク環境でジッターを測定して見ないと。わかりました。
532デフォルトの名無しさん
2019/10/20(日) 22:32:55.48ID:I/H74RW7533蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 22:59:16.11ID:2g822Cxo534蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 23:12:22.20ID:2g822Cxo setvbufって便利な関数を見つけた。これ使うか。
535デフォルトの名無しさん
2019/10/20(日) 23:13:52.92ID:fVQAzz8M 音声のバッファリングには普通はリングバッファを使う
536蟻人間 ◆T6xkBnTXz7B0
2019/10/20(日) 23:28:56.20ID:2g822Cxo ここまでのまとめ。
リングバッファを使う。
十分大きなバッファサイズでsetvbufを使う。
リングバッファへの読み書きは別スレッドにする。
バッファが空のときはイベント待ちで休ませる。
リングバッファを使う。
十分大きなバッファサイズでsetvbufを使う。
リングバッファへの読み書きは別スレッドにする。
バッファが空のときはイベント待ちで休ませる。
537デフォルトの名無しさん
2019/10/20(日) 23:44:50.34ID:Vt7fKSBc 別スレッドにキューイングするのに適したC++標準クラスは何かな?
538デフォルトの名無しさん
2019/10/21(月) 06:50:33.92ID:iwcvXj42 ゴチャゴチャ言うならビルトイン配列使っとけ
539デフォルトの名無しさん
2019/10/21(月) 15:01:03.56ID:c9dhXgWB C++から呼べるし
C++を呼べる
C++を呼べる
540デフォルトの名無しさん
2019/10/21(月) 15:43:44.16ID:M4XH2/Bk >>537
Queue への読み書きは、1要素当たりは短時間で済むことが多いので、
Queueを読み書きする場所で、必ず Critical Section などで囲むと良い。
一度に沢山の要素をまとめて書き込みたい場合は、原則的には、
1要素を書き込む処理をこまめに、Critical Section で囲むようにする。
必ずしも1要素ずつ囲む必要は無いが、こまめに囲った方が、
別スレッドの待ち時間が減ることが期待できるが、その意味が有る場合と
無い場合とが有る。
Critical Section の代わりに、Mutex や Semaphore などを使うことも出来る。
Queue への読み書きは、1要素当たりは短時間で済むことが多いので、
Queueを読み書きする場所で、必ず Critical Section などで囲むと良い。
一度に沢山の要素をまとめて書き込みたい場合は、原則的には、
1要素を書き込む処理をこまめに、Critical Section で囲むようにする。
必ずしも1要素ずつ囲む必要は無いが、こまめに囲った方が、
別スレッドの待ち時間が減ることが期待できるが、その意味が有る場合と
無い場合とが有る。
Critical Section の代わりに、Mutex や Semaphore などを使うことも出来る。
541デフォルトの名無しさん
2019/10/21(月) 17:20:19.00ID:Yxovtd3S キャッシュに配列を置けばいいじゃねえか
かんたんだろ
APUの近くに配列でOK
複雑なデータ構造なんて考える必要ナシ
かんたんだろ
APUの近くに配列でOK
複雑なデータ構造なんて考える必要ナシ
542デフォルトの名無しさん
2019/10/21(月) 18:19:39.76ID:iwcvXj42 タイミングで問題が出てるのにvectorにこだわるのはアホだよな
543デフォルトの名無しさん
2019/10/21(月) 18:33:52.73ID:K8Ck/3Ch 実行時のパラメータでバッファサイズ可変にするならvectorで始めにresizeしておくのが楽
size使える分配列のunique_ptrより取り回しも楽だし
size使える分配列のunique_ptrより取り回しも楽だし
544デフォルトの名無しさん
2019/10/21(月) 18:43:04.52ID:Kc9FjQwr boostにリングバッファのクラスあるよ
545蟻人間 ◆T6xkBnTXz7B0
2019/10/21(月) 18:50:23.92ID:LVq8IpRv 天才だから自分でリングバッファ作った。
https://github.com/katahiromz/YappyCam/blob/master/ring.hpp
https://github.com/katahiromz/YappyCam/blob/master/ring.hpp
546蟻人間 ◆T6xkBnTXz7B0
2019/10/21(月) 19:22:51.62ID:ICV7tWge バッファがいっぱいになったらどうしよう?
547537
2019/10/21(月) 19:27:27.31ID:iqf1snDW >>540
それらの同期機能って標準C++のクラスだけで実現できるもんなの?
それらの同期機能って標準C++のクラスだけで実現できるもんなの?
548デフォルトの名無しさん
2019/10/21(月) 19:30:51.93ID:Kc9FjQwr >>546
捨てるしかないだろ
捨てるしかないだろ
549デフォルトの名無しさん
2019/10/21(月) 20:56:31.15ID:NgTxqwl+ >>547
どこまでを標準と言ってるのか知らんけどお前の考える標準でスレッドをサポートしてるならたいてい同期機構もあるはず
どこまでを標準と言ってるのか知らんけどお前の考える標準でスレッドをサポートしてるならたいてい同期機構もあるはず
550蟻人間 ◆T6xkBnTXz7B0
2019/10/21(月) 21:02:21.32ID:LVq8IpRv >>547
WindowsではCriticalSection, CreateMutexなどがあったからC++11以前でも使えた。
C++11からstd::mutex, std::lock_guardなどが使えるぞ。
WindowsではCriticalSection, CreateMutexなどがあったからC++11以前でも使えた。
C++11からstd::mutex, std::lock_guardなどが使えるぞ。
551デフォルトの名無しさん
2019/10/22(火) 00:25:01.95ID:IM/z9Y8P ロックフリー的ななんか無かったっけ?
552蟻人間 ◆T6xkBnTXz7B0
2019/10/22(火) 16:18:00.26ID:QN5InCe0 リングバッファの排他制御どうするか?
push/popごとにロックかけたら遅くなりそう。
push/popごとにロックかけたら遅くなりそう。
553デフォルトの名無しさん
2019/10/22(火) 16:36:38.23ID:LzjGZCpL >>545
stlライクにしてる割にコピーやムーブが内部の値ベースなのおかしくない?
stlライクにしてる割にコピーやムーブが内部の値ベースなのおかしくない?
554デフォルトの名無しさん
2019/10/22(火) 17:03:31.86ID:mzkWHCb9 用途的に
reader 1
wrtier 1
だと思うけどそれならwait freeな実装が可能
read pointer/writer pointerで制御するやつね
かつかつに最適化するならこれ
しかしその前にどれだけの頻度と長さで排他の衝突するか見た方がいい
リアルタイムのオーディオなら短くても5msec周期とかじゃないか
かつlock中に多少のメモリの読み書きやってるだけなら排他が必要な時間は短い
なら素朴にmutex1個でのロックで十分な可能性も高い
同期のミスはデバッグがつらいから不用意に難しいことしない方がいい
もしくはある程度のバッファリング(遅延)が許容できるとか、固定長の処理であるなら
ならバッファを複数用意してダブル、トリプルバッファ的な制御でもいいだろう
つまりwriter側でバッファに全部書き終わったらそのバッファをreader側のキューにいれる
reader側は全部読み終わったらwriter側のキューに戻す
っての
とにかく原則どおりまずシンプルにミスなく作って計測して最適化ね
reader 1
wrtier 1
だと思うけどそれならwait freeな実装が可能
read pointer/writer pointerで制御するやつね
かつかつに最適化するならこれ
しかしその前にどれだけの頻度と長さで排他の衝突するか見た方がいい
リアルタイムのオーディオなら短くても5msec周期とかじゃないか
かつlock中に多少のメモリの読み書きやってるだけなら排他が必要な時間は短い
なら素朴にmutex1個でのロックで十分な可能性も高い
同期のミスはデバッグがつらいから不用意に難しいことしない方がいい
もしくはある程度のバッファリング(遅延)が許容できるとか、固定長の処理であるなら
ならバッファを複数用意してダブル、トリプルバッファ的な制御でもいいだろう
つまりwriter側でバッファに全部書き終わったらそのバッファをreader側のキューにいれる
reader側は全部読み終わったらwriter側のキューに戻す
っての
とにかく原則どおりまずシンプルにミスなく作って計測して最適化ね
555デフォルトの名無しさん
2019/10/22(火) 17:19:01.36ID:mzkWHCb9 ringのソース見たけど
おれはm_full なしでやるのが好みだな
つまりm_front_indexとm_back_indexが一致するのはemptyのときのみ
full時には実際は1個空きがある状態
これを推し進めればwait freeの実装に近づけるぞ
車輪の再発明だが勉強にはなる
おれはm_full なしでやるのが好みだな
つまりm_front_indexとm_back_indexが一致するのはemptyのときのみ
full時には実際は1個空きがある状態
これを推し進めればwait freeの実装に近づけるぞ
車輪の再発明だが勉強にはなる
556デフォルトの名無しさん
2019/10/22(火) 17:21:45.79ID:2ZhQSHmS557蟻人間 ◆T6xkBnTXz7B0
2019/10/22(火) 17:29:01.30ID:QN5InCe0 まずは記憶媒体の性能を計測してみた。
https://github.com/katahiromz/YappyCam/blob/master/tests/diskrate/diskrate.cpp
https://twitter.com/katahiromz/status/1186558848393285633
これはSSDの場合だ。HDDでも同様に計測しないといけない。
https://twitter.com/5chan_nel (5ch newer account)
https://github.com/katahiromz/YappyCam/blob/master/tests/diskrate/diskrate.cpp
https://twitter.com/katahiromz/status/1186558848393285633
これはSSDの場合だ。HDDでも同様に計測しないといけない。
https://twitter.com/5chan_nel (5ch newer account)
558蟻人間 ◆T6xkBnTXz7B0
2019/10/22(火) 17:43:23.84ID:QN5InCe0 static DWORD s_dwTick;
printf("write: %ld, %ld\n", cbToWrite, GetTickCount() - s_dwTick);
s_dwTick = GetTickCount();
// 最高の音質での出力。
write: 3900, 15
write: 3900, 0
write: 3900, 16
write: 3904, 16
write: 3900, 0
10msecごとに音声データがおよそ3900バイトあるようだ。
printf("write: %ld, %ld\n", cbToWrite, GetTickCount() - s_dwTick);
s_dwTick = GetTickCount();
// 最高の音質での出力。
write: 3900, 15
write: 3900, 0
write: 3900, 16
write: 3904, 16
write: 3900, 0
10msecごとに音声データがおよそ3900バイトあるようだ。
559デフォルトの名無しさん
2019/10/22(火) 18:28:33.04ID:HSQTG8Jj >>558
Win32APIや音声仕様はC++じゃないのでよそでどうぞ。>蟻人間
Win32APIや音声仕様はC++じゃないのでよそでどうぞ。>蟻人間
561蟻人間 ◆T6xkBnTXz7B0
2019/10/22(火) 20:08:29.90ID:+0Lq2R8m 【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
こっちに移動します。回答者に感謝します。
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
こっちに移動します。回答者に感謝します。
562デフォルトの名無しさん
2019/10/22(火) 21:35:58.70ID:SC+tqfVH Win32APIって何だよ
20年前からタイムスリップでもしてきたか?
20年前からタイムスリップでもしてきたか?
>>562
win32api(64bit版)で書くのが正義、という価値観もまだまだ存在するようです
win32api(64bit版)で書くのが正義、という価値観もまだまだ存在するようです
564デフォルトの名無しさん
2019/10/22(火) 23:33:30.81ID:QUuuj0zF C++11からできた属性構文あるけどこの属性は宣言にだけつければOK?
定義にも同じ属性を記載するべき?
定義にも同じ属性を記載するべき?
565デフォルトの名無しさん
2019/10/23(水) 00:34:15.61ID:kAyiuXKe >>563
それはお前だけの価値観だろハゲ
それはお前だけの価値観だろハゲ
566デフォルトの名無しさん
2019/10/23(水) 00:50:12.41ID:/s0IRa9G >>563,565
Mozilla Firefoxなどサードパーティ大手は今もWin32APIをネイティブに使っており.NETを使ってない。
Mozilla Firefoxなどサードパーティ大手は今もWin32APIをネイティブに使っており.NETを使ってない。
568デフォルトの名無しさん
2019/10/23(水) 02:03:48.66ID:my1FePPi 単に64bitのWindows APIもなぜかwin32と呼ばれ続けてること知らないんだろ
569デフォルトの名無しさん
2019/10/23(水) 06:28:47.24ID:/lpUBik0 それこそ20年前からタイムスリップしたのかって話だなw
570デフォルトの名無しさん
2019/10/23(水) 18:08:41.93ID:bvZ5IXVl 速度重視な場面ならWin32APIは今でも普通に使う
571デフォルトの名無しさん
2019/10/23(水) 20:43:18.87ID:R0F6kh0V うわぁ・・・
572デフォルトの名無しさん
2019/10/23(水) 21:15:01.42ID:kC3TvNwV 正直なところWin32APIで速度でるの?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
- 【悲報】日本、自民党(統一教会)で完全崩壊か?年金制度実質破綻、生活保護、国民健康保険廃止へ [383063292]
- ㊗157円 [194819832]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 高市早苗って「わざと」日本畳んでるよな? [419865925]
- ‎
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
