- 1 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:26:16 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/ ■過去スレ その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/ その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/ その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他突起する事項】
- 296 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:11:01 ]
- 制限解除するパッチもあるよ。公式じゃないけど。
- 297 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:11:23 ]
- もう少し詳しく調べてみた。
同時最大接続数が10に制限されるのは、listenする側の制限。 ようするに自分がサーバになる場合。 外向きの接続に関する制限は、half-open connectionが 1秒間に10個までに制限されている。(SP2から) half-open connectionは相手がacceptしてない接続のこと。 外向きの接続数に関しては、能力的な限界以外に制限は無さそう。 ただし1スレッドにつき64ソケットの上限有り。(回避は可能)
- 298 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 13:13:51 ]
- >>297
え?内向きの制限はもともとサーバー系でない奴にはついていて、 XP SP2以降のは、外向きの制限だろ?
- 299 名前:298 mailto:sage [2008/12/09(火) 13:15:20 ]
- 要は、listenじゃなくて、外に貼りに行くコネクション数に制限がついたってことな
- 300 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 14:35:58 ]
- >>298-299
そういう制限は見当たらなかった。 日本語の非プログラマ系のブログでそう書いてるところはあるが、勘違いだろう。 実際にセッションモニタ見てると、10なんて余裕で超えてるし。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 14:47:37 ]
- >>300
は? Event ID 4226でぐぐれよ 秒間の「外向きの」同時接続試行回数に関する制限で、 非公式のtcpip.sysに対するパッチも出ているから
- 302 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:00:15 ]
- P2Pとかやると直ぐでるからわかる
- 303 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:12:52 ]
- ああ、論点のずれが分かった
10個以上のTCP/IPのコネクションが維持できないって制限じゃないだろ 秒間に10個以上SYNパケット(TCPの最初のハンドシェイクで使う)を 投げないようにしているだけのはずだ 要するにスレッド沢山つくって並列でダウンロードさせようとしたところで 10個目以降ではconnect()呼んだ時点で制限にひっかかり、少なくとも他の ハンドシェイクが完了するまでは待たされるってこった
- 304 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:36:05 ]
- ちゃんと297でhalf-open connectionと書いたんだが。
それを否定されたら、同時セッション数としか読み取れないよ。
- 305 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 15:45:44 ]
- そうだな、よく読んでなかった
すまん
- 306 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:47:13 ]
- クライアントでどこまでスケールさせる気だ。
- 307 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 20:04:18 ]
- googleのクローラでね?w
- 308 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:25:35 ]
- シングルスレッドでダウンロードするとうまくいくのですが
マルチスレッドでダウンロードするとエラーが返ってきて GetLastError() で戻り値を調べても 0 で何が原因か分からないのですが どなたか分かりませんか? WinXP です
- 309 名前:308 mailto:sage [2008/12/10(水) 17:29:32 ]
- マルチスレッドといっても、デバックの為、スレッドはひとつなので
競合などはおきないように設計しているのですけど、うまくいかないのです
- 310 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:39:11 ]
- さすがにそれだけで答えろって言われても、俺には無理だな。
GetLastErrorを呼ぶスレッドは合ってるの?
- 311 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:42:36 ]
- ダウンロードはどのAPIを使っているの?
- 312 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 19:15:01 ]
- >>311
ググってもでないのよねフフフフフフフフフ
- 313 名前:308 mailto:sage [2008/12/10(水) 19:19:36 ]
- >>311
機密事項なので答えられません><
- 314 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:40:26 ]
- >>311
WinInet InternetOpen 以外のAPIだけとは言っておく
- 315 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:42:31 ]
- >>311
とあるライブラリなんです 何かはいえませんが
- 316 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 20:55:51 ]
- 俺は原因わかったよ
ここには書けないけど
- 317 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:36:55 ]
- 内々に連絡しておいた。
- 318 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:36:59 ]
- Debug版を納品とかフフフフフフフフフフフフフフフフフフフフフ
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
- 319 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:31:46 ]
- ソースも示さずデバッグ依頼とな。
- 320 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:37:51 ]
- ソース。
anchorage.2ch.net/test/read.cgi/mnewsplus/1228941968/ 残念ながらもう消えてしまったようだが。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:06:37 ]
- >>318
お主もなかなかのフフフフフフ でもユーザー名ばれるのよねフフフフフフフッフフフフフフッフ
- 322 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:29:11 ]
- 夜中にひとりでデバッグしてる時に
フフフフフフフフフフフフフフフフフフフフフフフフフ とか feeefeee feeefeee feeefeee feeefeee とか見ると鳥肌が立ちそうになる・・・
- 323 名前:デフォルトの名無しさん [2008/12/11(木) 14:11:44 ]
- POSIXスレッドでmutexロックでのデッドロックの回避法教えてください
- 324 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:27:28 ]
- 馬鹿どもにマルチスレッドを走らせるな
- 325 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:36:53 ]
- >>323
2個以上のmutexを同時にロックしないというルールを徹底させるのが一番簡単かと
- 326 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:32:14 ]
- 走る〜♪
走る〜♪ スレッドーたーちー♪
- 327 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:32:57 ]
- 馬鹿ですいません><
- 328 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:58:59 ]
- _beginthread( multi, 0, data );
>はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜 >はわわわわ〜
- 329 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 18:46:03 ]
- APIの問題ではなかったようだ
設計の問題だったようだ これは普通気づかない
- 330 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:45:05 ]
- Critical!
Criticalなのぉ〜 Criticalな処理をしていなかったのぉ〜 んぼおおおおおおおおおおおおおおおお
- 331 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 04:49:09 ]
- 馬鹿はマルチスレッドやっちゃだめだよ。
死んだじっちゃんの口癖だった。 馬鹿って言うのは思考力が著しく劣る人なんだけど、 具体的に例をあげれば、自分で調べて答えを見つけられない人の事なんだ。
- 332 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:20:42 ]
- だ〜か〜らぁ〜
ぐぐってもgooで聞いてもダメなのぉぉぉぉ〜〜〜〜
- 333 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 11:05:47 ]
- デッドロック 予防 とか、デッドロック 回避 とかで検索して、端から見ていってみ。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 13:36:29 ]
- 1スレッド
2スレッド 3スレッド 4スレッド 5スレッド 全部ためしたののですが1スレッドが一番早かったです どうしてでしょうか?
- 335 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:23:51 ]
- よくあることです。
- 336 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:40:12 ]
- 何を試したんだよ
- 337 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:25:44 ]
- キアイ
- 338 名前:デフォルトの名無しさん [2008/12/13(土) 19:48:33 ]
- あるスレッドで処理した結果をメインスレッドに渡したいのだがどうすればいい?
_beginthreadexの第3引数に結果用のポインタを渡せばいいのか
- 339 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 20:43:24 ]
- 典型的にはソウデスナ
処理してほしい内容と 処理結果の格納場所を 与えるのがよろしいかと思いますダ
- 340 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:39:30 ]
- >>338
CPUにお祈りする
- 341 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 02:58:11 ]
- >>334
マルチスレッド化して速くなるかどうかは状況による。 その状況がわからなきゃ、何とも言えない。
- 342 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 07:49:17 ]
- >>338
グローバル変数でいいよ メモリ空間を共有してるのがスレッドのメリットなんだし
- 343 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 09:18:38 ]
- …
- 344 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:09:40 ]
- volatile最強
- 345 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:13:32 ]
- >>388
俺はそういう場合スレッドセーフなスマートポインタ使うな スレッドにデータを渡す前に参照カウント増やしといて スレッド側では使い終わったら解放 メインスレッドは結果が必要なくなればスレッドが終了していなくてもデータを解放できる
- 346 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 11:22:01 ]
- クラスにしてthis渡してるな
class tiny_thread abstract { protected: HANDLE m_hthread; unsigned m_id; : いろいろメンバー private: static unsigned WINAPI thread_start(void *o) { tiny_thread *tt = (tiny_thread *) o; return tt->run(); } public: bool start() { m_hthread = (HANDLE) _beginthreadex(NULL, 0, thread_start, this, 0, &m_id); return m_hthread != 0; } virtual int run() = 0; };
- 347 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:41:15 ]
- >>388は素人童貞
- 348 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:56:58 ]
- >>388 に期待
- 349 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:34:39 ]
- ・メインスレッドが必ずサブスレッドより長生きするようにする。
メインがサブをjoinなり必要に応じて中断するなりする。 ・結果格納場所のポインタやコールバック関数のアドレスをサブに渡す。 メインがUIスレッドの場合、サブからPostThreadMessageした方が楽かも知れない ・通信用メモリの解放責任をメイン側と決めておく >>345みたいなサブスレッドだけ生き続ける設計は個人的に(GCの無い言語では)嫌だ これらが難しいと思うなら>>342だね。カッコ悪いけど確実かな
- 350 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:53:27 ]
- PostThreadMessageは取りこぼしが発生するので使っちゃいけません。
PostMessageを代わりに使おう。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 00:19:42 ]
- ところで、ファイバーってどうなん。
アイドル状態のスレッドでパカパカやって動かすとか スケジュール処理なワーカスレッド代わりとかしか思い浮かばん。 漏れは、スレッドの処理は概ね、待ち処理とか先行処理なので、 あまり使い方が思い浮かばない。
- 352 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 01:51:56 ]
- >>351
ファイバーは移植のためにあるようなもので 新規プロジェクトで使う価値は無に等しい。
- 353 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:10:30 ]
- >>352
短絡杉 プリエンプティブであることは必ずしも望ましいことじゃない。 ゲームではファイバーが好まれる。 Larrabeeでもシェーダはファイバーで実装されるそうだ。 マルチコアでハイパフォーマンスだすためにファイーバーは重要。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:31:59 ]
- 自分でコンテキストスイッチとかめんどくせぇぇぇ
- 355 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 03:01:53 ]
- ちまちま排他処理すんのめんどくせぇぇぇ
- 356 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 12:21:50 ]
- >>352、353
マルチスレッドで複数の関数叩くのと、ファイバーを複数キックするのの違いってやっぱ、 同期処理が不必要(他のスレッドでキック中のファイバーは自動的に同期される?)だとか スタックの制限(ファイバーキックされた段階でスタック指定できる)ですか? いえ、無論色んな意味合いで違うことは判るけど。
- 357 名前:デフォルトの名無しさん [2008/12/20(土) 16:20:24 ]
- int result = write( buf, size );
if( result == -1 && errno == EAGAIN ) SwitchNextCoroutine(); I/Oイベントドリブンなスケジューラをみたことある。↑みたいなの。 あとは同期が要らないってのが素晴らしい。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:34:51 ]
- VisualStudio 2010にはC#のyieldを使ったファイバーもどきライブラリが付いてくるらしいね
channel9.msdn.com/posts/Charles/George-Chrysanthakopoulos-CCR-and-DSS-Visual-Toolkit-2008/
- 359 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 23:50:27 ]
- それは歪でいまいちだね〜
まずコルーチンがあって それにスケジューラを足してファイバー イテレータ風に味付けしてジェネレータ(C#のyieldのことね) という階層があるべき姿だと思うな。
- 360 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:18:47 ]
- 64CPU環境でスレッドを256本生成したときに
struct data[2000]; なんてあって、dataの個々の要素を排他的にアクセスしたい場合 pthread_mutex以外に使えそうな手段ってありますか? CASってどうやって使うのかよくわからんし助けて
- 361 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:48:43 ]
- pthread_mutexでマズい理由は?
- 362 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:58:20 ]
- >>361
2000個もpthread_mutex_tって用意して使えるのですかね?
- 363 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:08:25 ]
- 発想が変?
- 364 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:47:06 ]
- mutexを2000個作って問題ないと思うよ。
自分だったら、struct data[200] 全体に対して1個のmutexにして、それ でパフォーマンスの問題が出たらそのときに対処を考える。 reader-writerロックが使えれば使う。
- 365 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:47:49 ]
- 訂正。
> 自分だったら、struct data[200] 全体に対して1個のmutexにして、それ struct data[2000] ね。
- 366 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 18:28:23 ]
- >>362
pthread_mutex_t はただのデータだから、何個作っても そのプロセスのメモリ以外の資源は使わない
- 367 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 00:54:05 ]
- 連結リストをCAS使って実装するときのお手本ってありますか?
- 368 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:04:19 ]
- >>367
ttp://www.cs.rochester.edu/u/michael/PODC96.html
- 369 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:14:01 ]
- 双方向は無いのか........................
- 370 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:50:26 ]
- 双方向でできると思ってんのかっ
- 371 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:40:02 ]
- rw_lockAPIが存在する環境で
同じrw_lock変数を以下のような構造で使うのって 問題ないでしょうか。 func() { rw_lock(read) if 条件{ rw_lock(write) rw_unlock(write) } rw_unlock(read) }
- 372 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 02:34:03 ]
- オレオレOSのオレオレrw_lock APIなら大丈夫だけど?
- 373 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 13:24:35 ]
- 実装次第だが、普通に考えるとデッドロックするな
- 374 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:32:54 ]
- r_lock 確保してるんだから if の中の w_lock が取れないだろjk
- 375 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 06:28:27 ]
- なぜrでロックしないといけないのかわからんけど、条件に関わるのか?
- 376 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 11:21:30 ]
- >>375
このパターン自体は典型的なケースだろ APIによっては、ReaderとWriterの他に「Writerに変更可能なReader」が用意されていることもある
- 377 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:00:09 ]
- WindowsでCreateThread中Cランタイムに含まれる関数を使うとリークを起こすとありますが、
普段からCreateThreadは使わずbeginthreadを使ったほうがいいんですか? 完全にCランタイム使わずってのも面倒だし、内部で使ってる関数があるかもしれない そういうことまで考えてあえてCreateThreadを使うメリットはあるのでしょうか?
- 378 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:06:34 ]
- 軽い
- 379 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:14:38 ]
- ない
- 380 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 17:56:15 ]
- _beginthreadexでおk
- 381 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 14:15:26 ]
- ないな
- 382 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:59:30 ]
- pthreadでmutexで
再起ロックする場合と 依存関係をハッキリさせてスレッドIDとFAST_MUTEXで判別 どっちが高速ですか?
- 383 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:33:29 ]
- 後者。
以前計測したことがある。 ただし、依存関係の洗い出し作業がとても大変だった。 デッドロックに直結するから、とても気をつけないといけない。 要求性能がシビアだったから後者で仕事のためにやったけど、趣味ならば前者をお薦めする。 排他制御がボトルネックになるようなら、前者で実装すればいい。 俺の場合は、本当に特殊で制限が厳しかったから前者でやっただけ。
- 384 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:35:13 ]
- ×排他制御がボトルネックになるようなら、前者で実装すればいい。
○排他制御がボトルネックになってから、後者で実装すればいい。
- 385 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:38:02 ]
- FAST_MUTEXって何?
- 386 名前:383 mailto:sage [2009/02/01(日) 16:18:24 ]
- 色々ぐだぐだだな。
お家で寝たいよ。
- 387 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:25:11 ]
- struct hoge{
int var pthread_mutex_t m; struct hoge * next; }; こんな構造体あって while(h){ pthread_mutex_lock(h->m); h->var++; pthread_mutex_unlock(h->m); h = h->next; } こんな風にリンクリストを舐める前後を排他して 舐めていくという処理は正しいでしょうか?
- 388 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:54:31 ]
- 加算をアトミックにしたいなら正しいんじゃない。
- 389 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:06:27 ]
- >>388
では、これもレースコンディション無く 検索可能ですかね? struct hoge{ int var; int id; pthread_mutex_t m; struct hoge * next; }; void search(id) { while(h){ pthread_mutex_lock(h->m); if( h->id == id){ h->var++; pthread_mutex_unlock(h->m); return; } pthread_mutex_unlock(h->m); h = h->next; } }
- 390 名前:デフォルトの名無しさん [2009/02/09(月) 14:04:10 ]
- shared_ptrで管理するオブジェクトAをスレッドXに渡し、スレッドXからdllを呼んで、dll内でオブジェクトAのメモリを確保する、
ということをしたいのですが、以下のコードでjoin終了時、shared_ptr<A>の解放処理のところで例外が発生します。 どういった理由が考えられるでしょうか? マルチスレッドでもdllを使わなければ問題なし、dllを使ってもマルチスレッドにしなければ問題なしでした。 struct A {}; // スレッドXにshared_ptrで渡されるデータ typedef void (__cdecl* DllFunc)(std::tr1::shared_ptr<A>& a); // スレッドから呼ばれるDLL struct X { // boost::threadに渡すスレッドオブジェクト std::tr1::shared_ptr<A> a_; X(std::tr1::shared_ptr<A> a) : a_(a) {} // DLLに渡すデータ void operator()(void) { // スレッド実行時に呼ばれる関数 HMODULE handle = LoadLibrary(L"dll_func.dll"); DllFunc dll_func = (DllFunc)GetProcAddress(handle, "dll_func"); dll_func(a_); FreeLibrary(handle); c.notify_one(); } }; int main(int argc, char** argv) { std::tr1::shared_ptr<A> a(new A); std::tr1::shared_ptr<X> x(new X(a)); boost::thread th(*x); th.join(); // ここで例外発生 } <dll_func.cpp> BOOL WINAPI DllMain (HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved) { return TRUE; } extern "C" __declspec(dllexport) void __cdecl dll_func(shared_ptr<A>& a) { a.reset(new A); // これがなければ大丈夫 }
- 391 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 15:33:18 ]
- よりによってここに書くか。すれ違いだWin32スレ行け。
DLLの勉強一からやりなおせ。 最初から全コードのせときゃもっと早く回答ついたんだろうが、ウザイからオシエネ。
- 392 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:58:44 ]
- DLL内でnewしたのをEXE内で解放したらエラー出るんじゃない?
そもそもshared_ptrだって内部で参照カウント用にnewしてるからDLLじゃ使えない気がするなー。
- 393 名前:392 mailto:sage [2009/02/09(月) 17:02:58 ]
- スレッドは全然関係ないね。うん。
- 394 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 05:13:43 ]
- >>390
たぶんこれだけで死ねる。 std::tr1::shared_ptr<A> a(new A); X(a)();
- 395 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 21:54:55 ]
- DLLか・・・COMについて調べたほうがいいんじゃないですかね
いろいろヒントあるよ
- 396 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 15:33:17 ]
- shared_ptr使ってるくせにdeleter知らないとか
|

|