[20160216] 자체 중단점을 가진 라인 모형
2063 단어 다중 스레드stdthreadMutableThread
(하지만 여전히 문제가 있다)
class procx /** HC TECH : MutableThread Version 0.1 ( build 1 , 20160216 )*/
{
public:
procx(auto a)
{
func=a;
cancel=false;
done=false;
status_code=0;
s=nullptr;
}
~procx()
{
delete s;
}
template <typename ... ARG>
void start(ARG ... arg)
{
s=new std::thread(func,arg...);
}
void join()
{
if(s!=nullptr&&s->joinable())
{
s->join();
}
}
void detach()
{
if(s!=nullptr&&s->joinable())
{
s->detach();
}
}
bool isdone()
{
return done;
}
bool iscanceled()
{
return cancel;
}
int getcancelcode()
{
return status_code;
}
/// return: true : Thread is canceled. false: Thread is over. else will be blocked.
bool trycancel()
{
cancel=true;
join();
return done;
}
private:
void* func;
std::thread* s;
bool cancel;
bool done;
int status_code;
};
procx 클래스는 하나의 라인 관리 클래스입니다.
만약 하나의 라인 함수가cancel에 있기를 원한다면, 이 방법은 작성할 때 다음과 같은 매크로 정의를 사용해야 한다
#define DECLX bool* doneflag,bool* cancelflag,int* _hc_status_code
#define SETUNDONE *doneflag=false;
#define SETDONE *doneflag=true;
#define CANCELPOINT(x) if(*cancelflag){*_hc_status_code=x;return;}
비교적 정규적인 작법은 다음과 같다
void proc_a(DECLX,int* ret)
{
SETUNDONE
CANCELPOINT(1);
SETDONE
}
만약 전체 코드가 작동할 수 있다면 사용 방법은 반드시 이와 같아야 한다
int main()
{
int ret=0;
procx s(proc_a,&ret);
/// Start Job "s"
s.start();
/// Try to cancel Job "s"
s.trycancel();
}
그러나 아직은 컴파일을 할 수 없습니다. C++ 템플릿 방식을 통해 함수 매개 변수 전송을 지원하고, 길어지는 매개 변수 지식을 잘 파악하지 못한 것 같습니다.계속 노력해!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.