C++ Builder XE4 > TThread > 「実行中または一時停止中のスレッドに対してはStartを呼び出せません。」 > : TThread(/* CreateSuspended= */ true)で作ったスレッドのnew直後のStartは問題ない
C++ Builder XE4
C++ Builder 2010以降、TThreadのResume()はdeprecatedになり、Start()の使用が推奨になっているようだ。
Startのエラー
一方で、下記のようにするとエラーとなり、「実行中または一時停止中のスレッドに対してはStartを呼び出せません。」というダイアログが表示される。
...
m_thr_XXX = new TThreadXXX();
m_thr_XXX->Start();
Sleep(100);
m_thr_XXX->Suspend();
Sleep(100);
m_thr_XXX->Start();
ここでm_thr_XXXはTThead型の変数。
CreateSuspended=false定義として実装している。
上記でエラーが出るのは2回目のStart()。
つまりは以下である。
- Start()時エラーが出ない条件
- CreateSuspended=falseでTThreadをnew直後にStart()
- Start()時エラーが出る条件
- Suspend()したものをStart()
参考
以下においてはResume()の代わりにどうするかの様々な回答がある。
Startでエラーが出る場合の回避?
Start()でエラーが出る場合でもSuspended = false;
ではエラーが出ない。
Suspended = false;
は以下のIlyaさんによる回答にもあるようにResume()と同等のようだ。
https://stackoverflow.com/questions/1418333/tthread-resume-is-deprecated-in-delphi-2010-what-should-be-used-in-place
Author And Source
この問題について(C++ Builder XE4 > TThread > 「実行中または一時停止中のスレッドに対してはStartを呼び出せません。」 > : TThread(/* CreateSuspended= */ true)で作ったスレッドのnew直後のStartは問題ない), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/717c13b4202eed14357c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .