- 1 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:20:06.25 ID:o3PNwIlC0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part134 mevius.5ch.net/test/read.cgi/tech/1516406742/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 856 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:33:23.35 ID:MPVDtJCy0.net]
- constの問題というよりサイズが決まってないからダメなんじゃないの?
- 857 名前:デフォルトの名無しさん [2018/05/17(木) 22:34:24.00 .net]
- ここ3年ほど32bitの組み込み機器に触ったことない
- 858 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:37:16.99 ID:53fi3uKJ0.net]
- 今はほとんど64bitの上で無理矢理32bit動かしてるんだよ
ネイティブ32bitCPUなんて化石
- 859 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 22:51:21.67 ID:yYAGBjqQ0.net]
- >>829
了解です、constは諦めマスカット >>830 どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんで サイズは未定にしておきました
- 860 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 17:13:18.87 ID:8ieomEvbM.net]
- vc++のマルチコアのオプ
- 861 名前:ティマイズなんて甘々だから余裕で
勝てるけどなぁ。 あんなのに負ける人もいるって、世の中広いなぁ(棒) [] - [ここ壊れてます]
- 862 名前:771 mailto:sage [2018/05/18(金) 18:23:15.07 ID:G5mHfuQa0.net]
- アホだろお前
- 863 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 18:33:25.05 ID:pNV6CZfO0.net]
- そりゃあ頑張れば勝てるだろう
コーディングコストと可読性の犠牲に見合うほど速くなるかどうかは別問題だがね
- 864 名前:771 mailto:sage [2018/05/18(金) 18:57:13.66 ID:jCVxhDbN0.net]
- VCもそうだけど大体のコンパイラは並列化や自動ベクタライズは強くないと思う
古くからある機能とそうでないものでは最適化に差が出るのは当然 だからこそSIMD使うときはみんなイントリンシック命令使ってるのであって
- 865 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 20:11:41.99 ID:Xj+Uy2RAd.net]
- >>834て誰に対してのレス?
- 866 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 21:20:25.60 ID:TsUe9Yho0.net]
- >>828
template<std::size_t N> class A { public: const double array[N]; template<typename ...ARGS> A( ARGS&&... args ): array{std::forward<ARGS>(args)...} {} }; template<typename ...ARGS> inline auto make_A( ARGS&&... args ) -> A<sizeof...(args)> { return A<sizeof...(args)>(std::forward<ARGS>(args)...); } auto a{ make_A( 1.0, 2.0 ) }; こんな感じだろうか。 要C++11以降。 >>どんなサイズの配列が来るかはコンストラクタが呼び出されるまでわからないんでサイズは未定にしておきました 要素数が決まってないとコンパイル時に困るので、テンプレートクラスにしちゃったけれど…
- 867 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 22:05:36.49 ID:TsUe9Yho0.net]
- あーいや、 >>828 は配列を渡して初期化したいのか…
↑じゃだめだ だいぶ別物になっちゃった。 ttps://wandbox.org/permlink/gUlWoKLb3QfigsQk
- 868 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 22:33:37.26 ID:G5mHfuQa0.net]
- 参考にしてみた
https://wandbox.org/permlink/3asRA3QSPQXmmn8l C++17ならヘルパー不要にはなる・・・(コンストラクタに与えた引数から推定 けどどっちにしても配列数可変にはできない ていうか配列の参照とか初めて使ったw
- 869 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:03:26.14 ID:9PVep4LN0.net]
- >>828
C++14のinteger_sequence使ってみた #include <iostream> #include <utility> template <size_t N> class A { const double array[N]; public: template <size_t... I> A(const double (&temp)[N], std::index_sequence<I...>) : array{temp[I]...} { for (auto x : array) std::cout << x << std::endl; } A(const double (&temp)[N]) : A(temp, std::make_index_sequence<N>()){} }; int main() { double t[] = {1.1, 2.2, 3.3}; A<sizeof(t)/sizeof(t[0])> a(t); //A a(t); // C++17 }
- 870 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:10:45.61 ID:WRHfxyyT0.net]
- 糞面倒だな
- 871 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:15:37.45 ID:VIvIbG0Fa.net]
- アンチパターンを生み出すための新機能が次々出てくるのがc++だ!
- 872 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 00:33:17.81 ID:WRHfxyyT0.net]
- こういうのからiostreamみたいになってゆくんだろうな
- 873 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 03:41:10.01 ID:BMt6S/TK0.net]
- つか引数にconst double(&temp)[]って何だと渡せるのこれ
()ないとエラー出るし
- 874 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 06:54:38.61 ID:KlOWaW480.net]
- 何も渡せないよ
配列数のない配列型はどんな文脈でも不完全型だからその型のオブジェクトは存在し得ない
- 875 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 07:39:54.12 ID:03NPLOb40.net]
- >>842
VS2017 15.7.1のVCのReleaseモードだとtemplateの部分が赤の下波線になるな Debugモードにするとなぜか消える そしてReleaseモードはエラーが出ているのにコンパイルして実行可能 バグじゃね
- 876 名前:はちみつ餃子 mailto:sage [2018/05/19(土) 12:37:22.83 ID:WMhjioR90.net]
- >>847
仮引数として表れる場合はポインタに調整されるんじゃなかったっけ?
- 877 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 13:11:36.50 ID:KlOWaW480.net]
- 配列型はね
配列の参照型はされない
- 878 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 09:24:48.82 ID:SHQ/MEmo0.net]
- 引数で渡す場合は配列自体が参照型だもんな
- 879 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 21:45:00.90 ID:SySmX4Pj0.net]
- 配列への参照ってのはあるんだけどね
template <typename T, int N> N size(T (&)[N]) { return N; }
- 880 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 21:45:22.62 ID:SySmX4Pj0.net]
- あ、ミスった
わかる人笑ってw
- 881 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 10:34:44.57 ID:QHYj3MXfM.net]
- >>848
> バグじゃね 未定義ならコンパイルできて実行できると言うのも規格に準拠してる正しい動作
- 882 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:07:12.03 ID:CbgK21am0.net]
- >>854
見当違いのレスだな DebugとReleaseでエディタの動作が首尾一貫してないって言ってるんだがな 15.7.2が来たから入れてみる
- 883 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:37:39.23 ID:LzyusK+ZM.net]
- >>855
普通の知能を持ってたら > コンパイルして実行可能 に突っ込まれてることぐらいわかるだろうに...
- 884 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 09:57:56.51 ID:NT2O+rqe0.net]
- >>856
15.7.2にしたらReleaseでも赤い波線出なくなったぞ エディタのバグが直ったようだ
- 885 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 10:14:09.85 ID:2zsXYckB0.net]
- >>848の3行目は無かったことにすると
- 886 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 10:39:06.93 ID:NT2O+rqe0.net]
- だから「エディタの」バグと書き忘れただけなのにお前らしつこいな
DebugモードでもReleaseモードでもコンパイルして実行できてたんだから
- 887 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:24:31.22 ID:fJYH1ZEbM.net]
- 書き忘れとか知らんがな w
そもそもエディタのバグと言うなら三行目は元々不要 余計なことを書いて突っ込まれるとか低能にありがちな行動ってだけ
- 888 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:33:07.54 ID:8Hna4W5Ya.net]
- >>859
気にするな。俺には>>854の方がよほど的はずれなことを言ってると思うよ。
- 889 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 12:40:43.11 ID:fJYH1ZEbM.net]
- >>861
>>856 同じようなレスを書いてループさせるのも低能にありがちな行動
- 890 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 13:02:27.39 ID:nSCJSr52M.net]
- エラーの話なのになぜか未定義とか言い出す奴が
- 891 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 15:37:22.12 ID:fJYH1ZEbM.net]
- 未定義の意味を理解してないなら絡んでこない方がいいぞ
- 892 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 17:20:05.74 ID:CpOh1zRO0.net]
- エラー
警告 未定義 不適格 ↑ 混同するやつが後を絶たないな
- 893 名前:デフォルトの名無しさん [2018/05/23(水) 19:15:29.66 ID:Au5e7VGg0.net]
- 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 V9EWM
- 894 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 21:13:20.83 ID:CpOh1zRO0.net]
- しょーもね
- 895 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 21:13:21.12 ID:fJYH1ZEbM.net]
- この文脈でエラーとか警告とか言い出す時点でアホ丸出しなんだが...w
- 896 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 22:07:04.14 ID:lbYCZF160.net]
- VisualStudioはインテリセンスとコンパイルに使うコンパイラが違う
ちょっと設定変えると、とてつもなくエラーが出るのにコンパイルは通るという事態は稀に良くある
- 897 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 12:25:45.78 ID:hqF4m+XgM.net]
- >>838
>>771
- 898 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 23:58:30.63 ID:XccjINB00.net]
- あるコンテナaとコンテナbを連結?するようなクラス(イテレータ)を作りたいんだが
イメージとしてはa.begin()からa.end()-1までいったら次はb.begin()になるようなやつを思い浮かべてるんだけど どんな風につくればよいかアドバイスください
- 899 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 00:18:38.25 ID:HgmGhgcw0.net]
- >>871
concat_iteratorでググるとそれっぽい実装がチラホラ
- 900 名前:デフォルトの名無しさん [2018/05/25(金) 10:18:09.43 ID:SC+wi2VoM.net]
- C++で2Dのwindowsで動くゲーム作ろうと思っているのだけど、ライブラリって何使えばいいんだ?
- 901 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 10:18:58.21 ID:AT66E0O7M.net]
- GDI
- 902 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 11:33:06.12 ID:JXMMrzE70.net]
- direct2d
- 903 名前:デフォルトの名無しさん [2018/05/25(金) 12:11:02.95 .net]
- Unity
- 904 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 12:19:23.12 ID:lIIOH/4a0.net]
- Opengl
- 905 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 12:52:26.94 ID:s00mTA6Oa.net]
- DirectX Tool Kit
- 906 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 14:11:55.60 ID:7mkguDclM.net]
- cairo
- 907 名前:デフォルトの名無しさん [2018/05/25(金) 18:33:18.15 ID:vSqqKkie0.net]
- いっぱいあるなー、一通り試してみようかな
- 908 名前:放置された蟻人間 mailto:sage [2018/05/25(金) 18:37:43.90 ID:mtapFpQed.net]
- 全部は時間的に無理。
- 909 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:06:13.22 ID:O4zlrz7ka.net]
- DirectX Tool Kit一択だとおもうが
- 910 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:16:41.38 ID:BiCg0uer0.net]
- OpenGLなんてのは?
- 911 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 19:17:34.72 ID:el+ngQt20.net]
- windowsに限定するならopneGLにする意味は薄い
- 912 名前:デフォルトの名無しさん [2018/05/25(金) 23:32:47.23 ID:vSqqKkie0.net]
- DirectX tool kit なるものは一般的なDirectXの上位互換みたいな捉え方でおk?
- 913 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 23:41:23.37 ID:9e9u/b+G0.net]
- >>882
よこからだけど、これ面白そう。
- 914 名前:はちみつ餃子 mailto:sage [2018/05/26(土) 01:45:05.97 ID:r5N0xqhb0.net]
- Siv3D とかも楽に使えると思う。 (3D という名前がついてるけど 2D もいける)
- 915 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 09:49:22.16 ID:Gw/MbzDj0.net]
- 今の時代なら cocos 2d とかモバイルでも使えるライブラリ使った方がいいんじゃないのか
- 916 名前:デフォルトの名無しさん [2018/05/26(土) 10:01:48.35 ID:KfOwUuVld.net]
- c++ならアンリアルエンジンで行こうぜ
- 917 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 15:38:59.11 ID:dTnlF+1t0.net]
- あれESCキーが消えるから…
- 918 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:17:20.26 ID:kgP2LOmLa.net]
- string::size_type についてですが、
size_type の前についている 「string::」 というのは何ですか?
- 919 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:20:28.98 ID:kgP2LOmLa.net]
- 名前空間ではないようですし。
- 920 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:28:38.63 ID:HMjaHK3IM.net]
- 静的メンバ関数
でぐぐれ
- 921 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 09:38:09.06 ID:kgP2LOmLa.net]
- >>893
ありがとうございます。 string::size_type は companion type というものらしいのですが、 この companion type とは何でしょうか?
- 922 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 12:33:02.70 ID:WLsT9puy0.net]
- メンバ関数の引数や戻り値、メンバ変数などで使用するためにクラススコープで定義された型のこと
クラス(この場合はstd::string)を利用する側は、 実際にはその型がなんであるかを知る必要なく 文字列のサイズの型としてstring::size_type を用いることができる 参考 https://stackoverflow.com/questions/41471741/string-companion-types
- 923 名前:デフォルトの名無しさん [2018/05/29(火) 13:47:00.51 ID:kgP2LOmLa.net]
- >>895
ありがとうございました。
- 924 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 23:46:46.84 ID:vO9YU0hS0.net]
- std::threadでサブスレッドで処理をしているのですが、処理をキャンセルするためthreadをdetachすると
メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 サブスレッドではnewでのリソース確保もしていないので理由がわからないです。 detachする際にはjoinableである以外に条件があるのでしょうか。
- 925 名前:デフォルトの名無しさん [2018/05/29(火) 23:59:57.19 ID:6Y/6D3P7M.net]
- >>897
スレッドローカル記憶域とか破棄されたあとにアクセスしてんじゃないの?
- 926 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 00:33:26.79 ID:4+P0NcT60.net]
- std::threadのdetachってスレッドを手放すだけでキャンセルはしないのでは
ラムダ式で処理を渡してるなら、ローカル変数の参照キャプチャとかしてるない?
- 927 名前:デフォルトの名無しさん [2018/05/30(水) 00:33:44.46 ID:D8xt/f/p0.net]
- detachしてもスレッドは動き続けますが。
- 928 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 00:56:37.13 ID:OvmXW6ID0.net]
- 一般にスレッドのキャンセルは難しいので適当に処理を終わらせてjoinするのが良いも思う
- 929 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 01:10:14.80 ID:K2528e3P0.net]
- https://ideone.com/3LDXGx
質問です。定期的に同じ関数をスレッドで起動するクラスを作りました。 んでコード中のここ無駄って書いてある行を削除する方法はありませんか。 開発はVCでやってますが、GCCでも通ればいいなーと思っています。
- 930 名前:897 mailto:sage [2018/05/30(水) 02:51:38.91 ID:gP4Z92jH0.net]
- すみません。言葉足らずでした。
メインスレッド:GUI、サブスレッド:既存のライブラリでデータ補間の重い処理 を担当していて、途中でデータ補間パラメータを変更したくなった場合 キャンセルボタンを押してやり直す、という処理を考えています。 CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。重い処理のループの中にキャンセル用フラグでも用意できればキャンセル通知後 ループを抜けて速やかにjoinするところまで到達させる等の方法があるのですが、 既存ライブラリなのでそうはいかず諦めてdetachしようと考えています。 そのまま走り続けるだけだから結果を回収せずほっておけば良いのかと思ってましたが 甘かったみたいです。 >>898 thread_localは使っていないです。 >>899 アドバイスありがとうございます。関数オブジェクト作ってキャプチャは使っていないです。 >>901 スレッドを平和理に終了させる方法はなさそうなのでdetachできなければ諦めてjoinするしかなさそうですね… とりあえず最小の再現例を作ってみることにします。
- 931 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 09:53:15.07 ID:eD7a+sCF0.net]
- 重い処理の方を別プログラムのプロセスにしちゃって止めるときはブチ殺すのがシンプルで良さそうに見える
- 932 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:43:48.31 ID:K2528e3P0.net]
- >>903
async つかえ。 wait_forっていう関数がプロミスにある。
- 933 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:44:50.87 ID:K2528e3P0.net]
- >>902
たのんますー。
- 934 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 17:50:39.57 ID:K2528e3P0.net]
- 基本的にstd::threadでキャンセルは不可能。
自分でそういう機構を汲んでやらないといけない。 whileの実行をキャンセルするbool変数つっこむとか。 それでもクリティカルパスの実行は避けられない。
- 935 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 18:55:49.81 ID:DJsvI6z80.net]
- 強引にスレッドを殺すと、
そのスレッドが確保してたリソースが解放されないかもしれないぞ メモリであったりセマフォだったりハンドルだったり ちゃんと終了処理を追加しないとダメだよ
- 936 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 19:05:49.61 ID:EimB82cz0.net]
- そのスレッドが使用するメモリ等のリソースを全て
スレッド終了まで保持していても >>897 >メモリを破壊しているようで全然別の箇所で色々なエラーが出てきます。system_errorは送出されていません。 となるなら、そもそもそのライブラリがスレッドセーフじゃないのかもしれない。 >>904式に別プロセス化するのが一番なのかもね
- 937 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 22:01:02.21 ID:K2528e3P0.net]
- ぷぅうううううううううりいいいいいいいぃいいいいいいいいいずへーーーーーーーるぷみーーーーーーーーーー。
- 938 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 16:11:24.94 ID:W0WQ5cWo0.net]
- 関数の中にif(cancel)return;みたいなのを大量に仕込んで外からフラグを立てて止めろ
- 939 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 19:02:31.60 ID:OT8Sfmwc0.net]
- 基本的にはフラグで止めるか別プロセスで実行するのが定石だが
質問者は >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは >構わないのですがjoinするとそこで処理終了まで待ってしまうのでdetachしたいわけです。 と言ってるからなぁ
- 940 名前: mailto:sage [2018/05/31(木) 20:27:20.65 ID:4k9lsrlf0.net]
- join なんて、カラクリが良く分からないものを、よく使う気になるなぁ
私なら、チャイルドプロセスが自爆するように、陽に記述するなぁ
- 941 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 20:40:15.15 ID:nmebeT/e0.net]
- joinが嫌ならdetachすればいいのよ
パンがなければお菓子をたべればいいのよ
- 942 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 20:53:09.91 ID:VgZC2OSf0.net]
- 世の中には信じられないメンタリティの人がいるもんだなあ
- 943 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:03:58.91 ID:3a+XHa0i0.net]
- join のカラクリは何も難しいことないと思うが
- 944 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:13:34.61 ID:nmebeT/e0.net]
- 標準ライブラリが嫌ならpthread使えばいいのよ
- 945 名前:897 mailto:sage [2018/05/31(木) 21:49:57.28 ID:VY6h/Th40.net]
- いろいろアドバイスありがとうございます。
どうもdetachした後に局所変数が確保されるとスタックを破壊してしまうようで、 局所変数を確保する前に>>911氏のいうようにif(cancel)return;入れるとLinuxでは落ちなくなりました。 ですが、windowsでは改善せず諦めました。atomicにするのものも面倒ですし。 結局キャンセルするときは結果を回収せず、さらに別スレッド立ち上げてjoinすることで メインスレッドのGUIに制御が戻るようにしました。長期的には別プロセス化するしかなさそうですね。 ありがとうございました。
- 946 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:53:20.51 ID:TwfgGFWOM.net]
- > 既存ライブラリなのでそうはいかず
って書いてあるのに>>905,>>907-908,>>911とかバカなら黙っとけよ...
- 947 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:35:57.56 ID:EV/maKH/0.net]
- 913はスレッドを自爆させた後joinしないのであろう…
- 948 名前:デフォルトの名無しさん [2018/05/31(木) 22:51:40.57 .net]
- 子スレッドが一つならjoinで待っててもいいけど、複数個になったら無限ループで待つよね
- 949 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:52:12.55 ID:EV/maKH/0.net]
- ていうか「重い処理かつ終了に時間が要するスレッド」複数個を所有するサーバみたいなスレッドを一発噛ませて、
パラメータを変えたくなったら「現行スレッド停止」と「新しいパラメータでのスレッド起動」をサーバに対して指令するつくりにすれば 良い この場合は「重い処理かつ終了に時間が要するスレッド」が終了するまで誰も待つ必要はなく(※サーバ終了時は除く 、サーバみたいなスレッドは、クライアントから「新しいパラメータでのスレッド起動」コマンドを受けたときおもむろに 「死んでる(再利用できる)スレッドはどれかいな〜、」とタイムアウト0秒のjoinでポーリング式にサーチすれば良い 現行スレッドが死ぬまでの間現行スレッドと新たに起動するスレッドが並列に動くことになるが >CPUは複数コアあるのでサブスレッドが走り続けてリソース開放が遅れるのは 構わない ということですしおすし、
- 950 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 22:56:14.51 ID:EV/maKH/0.net]
- >>921
ウィンドーズならWaitForMultipreObjects()とかその亜種で複数の終了待ちができうる そうでなくともイベントフラグの同時待ちはだいたいどんなマルチタスクOSでもできるから それを使って類似のしくみを作れうる、。
- 951 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 23:21:33.93 ID:i2WXWbd70.net]
- >>923
できうる、作れうるって日本語的におかしいだろう
- 952 名前:デフォルトの名無しさん [2018/06/01(金) 04:04:16.74 ID:p3jBadVq0.net]
- ウインドーズとか何か別物感あるし、multipleのスペルもおかしいし大丈夫か
- 953 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:08:40.92 ID:ampOWGNn0.net]
- 色々なところで糞が露呈している
それがWindows
- 954 名前:はちみつ餃子 mailto:sage [2018/06/01(金) 04:11:32.11 ID:uW2rQW//0.net]
- デザインとしては Windows の方が現代的なんだけど、
色んなものが POSIX を基本にしたデザインになってるから噛み合わないんよなぁ。
- 955 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:16:04.83 ID:ampOWGNn0.net]
- POSIXに準拠できないWindowsがどうかしている
- 956 名前:はちみつ餃子 mailto:sage [2018/06/01(金) 04:22:16.25 ID:uW2rQW//0.net]
- >>928
昔は POSIX 準拠にしてたよ。 アメリカの政府が採用するのに POSIX を要求してたみたいで、仕方なくやったって話。 だけど、基本的なモデルが違うものに API だけ接ぎ木してもなぁ。
- 957 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 04:43:45.31 ID:SICoZSIN0.net]
- windowsでpthread使うたびにトラブル起こってつら
- 958 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 08:14:44.74 ID:WJ5uQBEIM.net]
- >>921
他に条件があるならともかく、普通にjoinで待てばよくね?
- 959 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 08:27:54.49 ID:WJ5uQBEIM.net]
- >>922
joinしたら再利用できないだろ
- 960 名前:デフォルトの名無しさん [2018/06/01(金) 08:30:22.24 .net]
- >>931
別に、joinで済むならjoinでいいんじゃね
- 961 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 09:15:20.19 ID:oHKnNuZr0.net]
- キャンセルしたくなるほど長い処理ならスレッドキューイングする利点はない
もちろんしたいならしてもいい
- 962 名前:デフォルトの名無しさん [2018/06/01(金) 09:35:53.16 ID:uCsHgk1n0.net]
- C++を使うなら、Windowsでいいんじゃないの。
Clang、gcc、clと主要なコンパイラが動く貴重な環境だし。 文書を残さないといけないからアプリも必要。 図を描くのにvimでSVG書くって人もいるけど、流石にそれは労力の使い方を間違えてる。
- 963 名前:デフォルトの名無しさん [2018/06/01(金) 10:01:00.93 ID:oDn7ey18M.net]
- サブスレッドでjoinして結果を使わない、というのとデタッチするのとどう違うんやろな。デタッチってなんのメリットあるんやろか。
- 964 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 10:15:36.25 ID:oHKnNuZr0.net]
- 自分で書いてる通り結果を使わなくて終了も待ちたくないなら join せずデタッチ。
メリットはリソース(スレッドハンドルなど待ち合わせ用リソース)の自動的な解放くらいか。
- 965 名前:デフォルトの名無しさん [2018/06/01(金) 11:41:29.12 ID:sIQxQP9sa.net]
- 連結リストのクラス list があります。
addFirst removeFirst などのメンバ関数があります。 この list を継承して、 stack クラスを作ります。 stack クラスにはメンバ関数 push と pop があります。 push の中で addFirst を呼んでいます。 pop の中で removeFirst を呼んでいます。 stack クラスのインスタンスからは、 list クラスの addFirst, removeFirst などを 利用不可としたいのですが、どうすればいいのでしょうか? : public list と継承するともちろんダメです。 : private list と継承すると push の中で呼んでいる addFirst が使えなくなってしまいます。 どうすればいいのでしょうか?
- 966 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 11:47:52.19 ID:1LiDvq+rd.net]
- protect
- 967 名前:デフォルトの名無しさん [2018/06/01(金) 11:55:31.26 .net]
- friend
- 968 名前:デフォルトの名無しさん [2018/06/01(金) 11:55:48.39 ID:uCsHgk1n0.net]
- ・stack : protected listとして、必要なメンバをstackで明示的に公開する。
・listとstackのポインタに互換性がなくなる。
- 969 名前:デフォルトの名無しさん [2018/06/01(金) 11:58:45.22 ID:uCsHgk1n0.net]
- ・assert、throw等で警告するだけのaddFirst、removeFirstをstack側に作りオーバーライドし、規約で使うなと言っておく。
・非常にダサい。
- 970 名前:デフォルトの名無しさん [2018/06/01(金) 12:00:33.78 ID:uCsHgk1n0.net]
- ・基底クラスbasic_listを設け、そこからlistとstackを別に派生する。
- 971 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:12:54.27 ID:SICoZSIN0.net]
- >>935
釣りか? MSYSがあるからなんとか我慢して作業できるが 仕事以外でそんな苦痛を受けながらプログラミングなんかしたくはない
- 972 名前:デフォルトの名無しさん [2018/06/01(金) 12:31:43.05 ID:uCsHgk1n0.net]
- >>944
wslでおk。
- 973 名前:デフォルトの名無しさん [2018/06/01(金) 12:33:20.56 ID:uCsHgk1n0.net]
- wslを有効にしてコルタナにウブンツと言えばすぐ使えます。
- 974 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:41:08.30 ID:SICoZSIN0.net]
- wslでWindowsネイティブなバイナリ作れんの?
- 975 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:43:01.01 ID:Iz+jFShBM.net]
- >>944
> 仕事以外でそんな苦痛 でもどんな苦痛なのかは書けない w
- 976 名前:デフォルトの名無しさん [2018/06/01(金) 12:44:36.05 ID:uCsHgk1n0.net]
- さあどうだろ?
Linux側からWindowsのファイルは読めるけど。 環境設定が大変そうだな。 逆にWindows側からLinuxのファイルを直接変更したらだめらしい。
- 977 名前:デフォルトの名無しさん [2018/06/01(金) 12:47:41.68 ID:uCsHgk1n0.net]
- 俺のおすすめの使い方は、Windowsバイナリはcl、Linuxバイナリはwsl上のgccで作る。
開発環境はVisual Studio2017、CMakeプロジェクトを使う。 これだけでWindowsとLinux両方対応できる。
- 978 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 12:51:07.74 ID:SICoZSIN0.net]
- >>950
それ良さそうだな 今度試してみる
- 979 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:01:33.50 ID:sIQxQP9sa.net]
- >>939-943
ありがとうございました。 Macを使っている人はいませんか? コンピュータサイエンティストって大抵Macのノートパソコンを使っているイメージがあります。
- 980 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:11:39.88 ID:pUOZzX0iM.net]
- >>952
mac使ったところでmacしか使えないだけ 本物になりたいならシェアが高いウインドゥスを使え もしくはLinux
- 981 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:29:21.95 ID:A9MSzynoM.net]
- >>944
別に補陀落渡海しても良いのよ
- 982 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 13:30:34.27 ID:STCtC+aF0.net]
- >>952
Macの内部はUnixだから
- 983 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 16:26:14.37 ID:WJ5uQBEIM.net]
- >>952
念の為、標準ライブラリにlistもstackもあるからね。 あと標準ライブラリのlistは継承して使えるように設計されてないからね
- 984 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:47:58.65 ID:U3fjUVmpd.net]
- リスト構造のスタックなんて簡単なんだからゼロから作っちゃえば?
- 985 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:52:33.22 ID:U3fjUVmpd.net]
- push pop size
copy move swap constructor destructor くらいでしょ使うの 片方向でもいいだろうし
- 986 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 19:38:34.27 ID:nSTFCyDP0.net]
- stackはlistではないし継承は間違ってるわな
- 987 名前:デフォルトの名無しさん [2018/06/01(金) 19:48:21.87 ID:uCsHgk1n0.net]
- 俺、リストツリーっていうの考えたんだけど、聞きたい?
- 988 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 19:58:07.59 ID:U3fjUVmpd.net]
- >>959
頭が硬いやつはソフトに向いてない
- 989 名前:デフォルトの名無しさん [2018/06/01(金) 20:19:59.69 ID:sIQxQP9sa.net]
- >>953
>>955 ありがとうございました。 >>956-959 実は、 最近出版された岩沼宏冶他著『データ構造とアルゴリズム』(コロナ社) という本にスタックとキューのそのような実装が書いてあるんです。 まず連結リストをテンプレートを使って実装しています。 その関係で質問しました。 まえがきに「本書の前半ではC++言語での実装コードを示すが、これは 初学者によいコードを読ませることが目的であり、Art of Programmingに つながるような解説を付記するように努力する。」と書いてあります。
- 990 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 21:27:36.17 ID:naL+ZRGN0.net]
- 下手が伝染るから、クヌースを取り寄せしたほうが良いぞ
- 991 名前: mailto:sage [2018/06/01(金) 21:36:56.16 ID:/qAuBE/I0.net]
- >>938
私なら委譲を使います
- 992 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 21:52:15.80 ID:eT4/jjIPM.net]
- >>933
どんな用途を想定してるの?
- 993 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 01:50:36.43 ID:z1beHaLa0.net]
- >>965
横レスだけど複数スレッドがあったとき ・どれかの終了を待つならjoinでは無理 ・全ての終了を待つなら適当な順でjoin というだけのことでは
- 994 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 07:25:22.85 ID:uqsytqRM0.net]
- >>938
そういうことをやるなっていうのが「リスコフの置換原則」
- 995 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 07:40:27.42 ID:SH+PTz7E0.net]
- 「外から見えるインターフェースが変わらなければ
内部の具体的な実装がまったくの別物に変わっても使うのに支障ない」 て
- 996 名前:いうオブジェクト指向のカプセル化だっけ、あのあたりの教材じゃなかろうか。
それと継承のアクセス制御の使い方。 [] - [ここ壊れてます]
- 997 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:23:31.53 ID:SH+PTz7E0.net]
- 派生クラスのアクセス制御、と書くべきだったかな。
意味は通じると思うけど、用語の使い方に厳しい人もいる故。
- 998 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 13:02:49.13 ID:x6PfuSbY0.net]
- >>932
言葉足らずだったスマン スレッドハンドルの配列があったとして、[i]についてjoinしたら[i]を再利用できる(再びスレッドをcreateしなおせば良い 、の意味 joinせずとも済むやり方もあるが、 (「重い処理かつ終了に時間が要するスレッド」の関数本体をそのままスレッドにするのではなしに、 普段イベントを待ち、イベントが来たら「重い処理かつ終了に時間が要するスレッド」の関数本体を普通にcallし、そいつがreturnしてきたら 再びイベントを待つ、というループするスレッドとしてwrapすれば良い、等 結局「重い処理かつ終了に時間が要するスレッド」が使っていた資源が開放されたことを論理的に知る必要からは逃れられず、 一番簡単なのがjoinですよという意味で>>922ではjoinと言ったので察してホスイ、
- 999 名前:デフォルトの名無しさん [2018/06/02(土) 17:26:29.14 ID:RQ4rJlvL0.net]
- ほむほむ、ところでgtestとBoost.Testはどっちが良いですかな?
- 1000 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:24:16.97 ID:gfv0Z2yCa.net]
- 初心者脱出したいから課題くれ
- 1001 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:26:24.96 ID:g8+eu/OT0.net]
- >>972
自分でこれまで勉強した範囲で疑問なり興味なり沸いてきて、あれこれコード書いて試して見ようとしたことは無かったの? もし全くないのならもう諦めた方がいい。
- 1002 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:46:44.76 ID:D70hzHzDd.net]
- >>972
純粋な言語部分 プリプロセッサ 標準ライブラリ 特定のOS, 特定のライブラリ 組み込み どの辺の課題?
- 1003 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:58:49.35 ID:/T91IteZ0.net]
- 「計算機プログラムの構造と解釈」(SICP)を読んで演習課題を解いたら良い
- 1004 名前: mailto:sage [2018/06/04(月) 19:13:33.43 ID:gbEnuF2j0.net]
- >>975
まだ scheme 手習いが終わっていないのです(泣)
- 1005 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 22:04:43.09 ID:2Ea3o2oY0.net]
- リトルインディアン、ビッグインディアンも教えない職場があるんだな。
おっさん、びっくりしたわ。
- 1006 名前:デフォルトの名無しさん [2018/06/06(水) 22:13:02.59 ID:JW9lzKor0.net]
- >>977
周知のこととして扱われているのかもしれませんね。 私は学校で教わりました。
- 1007 名前:デフォルトの名無しさん [2018/06/06(水) 22:41:41.43 .net]
- >>977
インディアンかー 俺も教わった覚えないな
- 1008 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:17:12.31 ID:jNE6zLei0.net]
- One little, two little, three little Indians
- 1009 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:33:53.26 ID:m+Bnnm4Z0.net]
- エンディアンなのかインディアンだったかいつも忘れる
口語は混ざる
- 1010 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:36:43.24 ID:zexNX0En0.net]
- >>979
インディアンは習ったろ
- 1011 名前:デフォルトの名無しさん [2018/06/06(水) 23:48:14.36 .net]
- >>982
ネイティブアメリカンなら習ったけど🙄
- 1012 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 23:48:33.17 ID:Ne6bz6Er0.net]
- ガリバー旅行記はいつどこで習うんだろう
- 1013 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 06:56:59.11 ID:u4DD79290.net]
- 「リトル・エンディアン」「ビッグ・エンディアン」て用語は
『ガリバー旅行記』が由来、という情報が載ってるサイトで、 主人公が漂着した小人の国、巨人の国のエピソードから…、とか 書いてあるのを見たことがある。ネタだったのかも知れないけど。
- 1014 名前: mailto:sage [2018/06/07(木) 08:03:30.91 ID:twFjtnTk0.net]
- >>985
それはほんと、小人国での卵の割り方にちなみます
- 1015 名前:デフォルトの名無しさん [2018/06/07(木) 08:17:13.03 .net]
- >>986
ニホンゴムズカシイネ^^
- 1016 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 11:07:30.43 ID:texCzkEwa.net]
- >>977
今どきバイトオーダー意識するようなプログラム書くような職場じゃなきゃ教えないよ アライメントなんかも同様
- 1017 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 11:22:48.86 ID:W9Xn18jEd.net]
- インディアンを教える職場って
どんな職場だよ
- 1018 名前:デフォルトの名無しさん [2018/06/07(木) 11:49:27.36 ID:ZMsL/8Fsd.net]
- だってオラはSEだから
- 1019 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 12:38:00.08 ID:pGQiQE2u0.net]
- SEなら尚更知っておかないと
日本はなんちゃってSEばっかだもんなw
- 1020 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 13:14:35.77 ID:W9Xn18jEd.net]
- SEとインディアンの関係は?
- 1021 名前:985 mailto:sage [2018/06/07(木) 13:15:06.93 ID:u4DD79290.net]
- >>986 調べたら小人同士の戦争の原因なのね。巨人国は関係ないな。
実は空の国の「学者の無意味な論争」の一例だと思い込んでいたんだわ。 >>989 「ウチはCのコーディングスタイルとしてAT&T式を基本とします」 ってところはあるかも知れん。
- 1022 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 20:44:47.09 ID:BA7hChNz0.net]
- >>988
貴様が知る必要はない!
- 1023 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 20:48:11.43 ID:DJdTp6lo0.net]
- 何でもネットに繋がらなきゃならないこの時代にhtolやltohを避けて通れるもんなのか?
PHPしか触らないWeb屋ならともかくここC++スレだぞ
- 1024 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 21:46:11.03 ID:XXEPBZnxM.net]
- 今時C++と言えどhtol()とかltoh()なんて低レイヤーの関数使うことなんて滅多にないだろ
- 1025 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 21:50:55.26 ID:gS6wfz1ca.net]
- >>995
ソフトウェアがなんでもかんでもネットワークに繋ぐ必要があると思ってるの?ここC++スレだぞ
- 1026 名前:デフォルトの名無しさん [2018/06/07(木) 22:31:28.79 .net]
- C++使うくらいだからXMLとかJSON使うんだろ
- 1027 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 23:10:47.05 ID:C4iY9p8E0.net]
- >>998
utf16はどうしたらいいの?
- 1028 名前:デフォルトの名無しさん mailto:sage [2018/06/07(木) 23:16:41.18 ID:B+7Xk0Ks0.net]
- 続きはwebで
- 1029 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 68日 2時間 56分 35秒
- 1030 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|