병렬 실행 스레드를 구현했습니다. 원하는 것은 사용자가 'p'라고 말하면 버튼을 누를 때마다 즉시 스레드가 멈춰야한다는 것입니다.즉시 스레드 종료
내 코드 :
bool b=false;
pthread_t thread1=0;
void handlerforfunc3(void* arg)
{
b=true;
cout<<"Handler exited"<<endl; //this was not output when 'in the while loop' stopped printing'
}
void handler()
{
cout<<"PROCESS HAS ENTERED THE HANDLER"<<endl;
rrscheduler(ready, job);
}
void* func3(void *arg)
{
pthread_cleanup_push(handlerforfunc3, NULL);
timer(arg); //timer() is a function called in the thread
handler();
pthread_cleanup_pop(0);
}
void rrscheduler()
{
pthread_create(&thread1, NULL, func3, (void*)(arg1));
}
int main()
{
while(1)
{
char c=cin.get();
switch(c)
{
case 'p':
if(thread1!=0)
{
pthread_cancel(thread1);
while(!b)
{
cout<<"in the while loop"<<endl;
}
} //thread1!=0
b=false;
rrscheduler();
}//switch ends
} //while ends
}
무엇이 일어나는 것은 내가 'while 루프에서'화면 가득를 'P'를 누름으로써 방해하려고 할 때마다 연속적으로 다음 후에 멈추는 디스플레이되고 있다는 것이다 3-4 s.And 그 후도 '처리기 종료'도 표시되지 않으며 rrscheduler도 호출되지 않습니다. 또한 'while 루프'에 이 표시되는 동안 timer() 함수의 명령문도 표시됩니다.
내 질문이다 :
이 1.how 내가 스레드가 즉시
2.Why 주 우리는 while 루프 나가 후 실행되지에서 rrscheduler입니다 실행을 종료 될 수 있습니다 (b는 사실이다 후) ?