0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++ Builder XE4 > TThread > 「実行中または一時停止中のスレッドに対してはStartを呼び出せません。」 > : TThread(/* CreateSuspended= */ true)で作ったスレッドのnew直後のStartは問題ない

Last updated at Posted at 2018-10-12
動作環境
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?