스레드를 실행해야하는 프로그램이 있습니다. 문제는 스레드 내부 또는 스레드 외부에서이 스레드를 강제 종료하려고 시도 할 때마다 발생합니다. "오류 6 - 잘못된 핸들 "오류std :: thread를 죽일 수 없음
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);
}
이것은 내가 클래스/스레드
myclass::inst()->start();
나는 또한 표준이 : 외부 (extern) 킬러 스레드 만들기 내 .CPP 및 .H 파일에 선언 해봤를 시작하는 방법, 이렇게하면 클래스 외부에서 액세스 할 수 있지만 여전히 "오류 6, 잘못된 스레드 핸들"오류가 발생합니다.
이 코드의 잘못된 점을 알려주실 수 있습니까? 고마워
스레드를 '종료'하지 마십시오. 이제까지. 공유 자원이 잠겨 있거나 (아마도 새로운 내용 일 때) 쓰레드가 죽게되면 자원은 결코 잠금 해제되지 않습니다. 그리고 프로그램이 그냥 – UKMonkey
을 걸어 놓기로 결정할 수도 있습니다. 위의 코드를 작동시키는 방법을 알고 있습니까? –
분리하지 않은 것으로 생각하십니까? VisualC++ stdlib 구현에서 CloseHandle을 호출합니다. – PeterT