動作環境
C++ Builder XE4
C++ Builder 2010以降、TThreadのResume()はdeprecatedになり、Start()の使用が推奨になっているようだ。
Startのエラー
一方で、下記のようにするとエラーとなり、「実行中または一時停止中のスレッドに対してはStartを呼び出せません。」というダイアログが表示される。
Unit1.cpp
...
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