私はスレッドを実行する必要があるプログラムを持っています。問題は、スレッド内かスレッド外のいずれかからこのスレッドを削除しようとするたびに発生します。 「エラーstd :: threadをkillすることはできません
class myclass
{
public:
static myclass* inst()
{
if (oInst == nullptr) oInst = new myclass;
return oInst;
};
void main();
void start();
void ex_stop()
{
//HANDLE Stopper = Killer.native_handle();
//TerminateThread(Stopper, 0);
}
}
private:
std::thread Killer;
}
void myclass::start()
{
Killer = std::thread(&myclass::ex_main, this);
Killer.detach();
}
void myclass::main()
{
...
if (0 == TerminateThread(Killer.native_handle(), 0))
{
char error[200];
sprintf(error, "error %i\n", GetLastError());
printf(error);
}
これは私もSTDを作ってみたどのように私は
myclass::inst()->start();
クラス/スレッドを開始している::キラーにはexternをスレッドと私の.cppファイルと.hファイルでそれを宣言し、私はクラスの外からアクセスすることができますが、私はまだ同じ "エラー6、無効なスレッドハンドル"エラーが発生します。
このコードの問題点を教えてもらえますか?ありがとう
スレッドを「終了」しないでください。これまでスレッドに共有リソースがロックされていて(おそらく新しいものの中に)、そのスレッドが強制終了された場合、そのリソースは決してロック解除されません。あなたのプログラムはちょうど – UKMonkey
を掛けることを決定するかもしれません。だから、上記のコードを動作させる方法を知っていますか? –
あなたは取り外されていないと考えていますか? VisualC++のstdlib実装でCloseHandleを呼び出します – PeterT