|
공윤경 님이 하신 질문을 잘 이해했는지는 모르겠습니다.
가장 대표적인 방법은 Stop체크는 쓰레드로 돌리는 것입니다.
장비라는 것이 어떨 경우는 위험할 수도 있습니다. 특히 고속동작으로 갈 수록 즉각적으로 멈추어야하는
경우가 많습니다. 이렇게 S/W로 멈추게 하신다는 걸 보면 그렇지는 않는 것 같습니다.
일단 답변부터 말씀드리면,
실시간적으로 멈추게 하실려면 Stop을 감시하는 쓰레드를 쓰셔야 합니다.
Stop버튼을 누르면 Stop 을 표현하는 플래그 혹은 bool형 변수 등등이 변경되게 하시는 거죠..
(지금도 이렇게 되어있으시겠지요..)
그리고 이 변수를 주기적으로 체크하고 있는 쓰레드가 하나 있어야 겠지요.
이 쓰레드는 동작이 시작될 때 작동시키고, 스탑이 눌러지면
쓰레드에서 동작을 멈추게 하는 함수를 호출하고 쓰레드 자신은 멈추어야 하구요..
또한 멈추는 동작은 제약조건이 있습니다.
while문의 내용에 우선해서 Stop체크 쓰레드가 연속적인 동작 명령을 멈추어야 한다는 거죠..
(동작에 필요한 여러가지 일 중에 Stop이 눌러지면 쓰레드가 동작을 멈추고, 또한 while내용의 이후명령도
무시할 수 있어야 하는 거죠..그래야 이상동작이 일어나지 않겠지요...이게 제약 조건으로 신경쓰셔야 하는
일인거죠..)
음... 이렇게 하시는 게 어려운 상황이시라면... 좀 안좋은 방법이긴 해도..간단히
매번 체크 루틴을 쓰십시오....이렇게 말입니다. (while보다는 for를 권합니다.)
이 루틴은 함수로 만드시고, Stop_Flag가 참이면 return하는 방식을 권합니다.
모터작동함수(지정회수)
{
for(int 반복카운트=0; 반복카운트<지정회수; 반복카운트++)
{
if(!Stop_Flag) 해야될 일 하나...;
if(!Stop_Flag) 해야될 일 둘...;
if(!Stop_Flag) 해야될 일 셋...;
if(!Stop_Flag) 해야될 일 넷...;
if(Stop_Flag) return; /// 만약 도중에 Stop이 눌려지면 더이상 for문의 남은 회수는 돌지않고 복귀한다...
}
}
별로 좋은 방법은 아닌듯 하지만, 간단하게 쓸수는 있다고 생각해서...*^^*
공윤경 님이 쓰신 글 :
: 안녕하세요?
: 질문쟁이가 또 나타났네요.
: 언제나 이곳에서 발등에 떨어진 불을 끄고가는 공윤경입니다...
:
: 질문입니다. ^^
: 어떤함수동작중에 만약 어떤변수에 STOP이라는게 들어있으면 함수 도중에라도 멈춰야할때...
: 뭘써야하죠?
: while문을 쓰자니..들어갔으면 일단 한번 돌고....
: try catch문을 이용해서도 할수있는건가요?
:
: 지금하려는게 폼에서 횟수를 입력해서요.
: 만약 3이라 입력하고 [왕복]이라는 버튼을 누르면
: 모터가 3회 움직이거든요.
: 근데 그도중에 Stop버튼을 누르면 stop_flg에 1이 들어가게했어요.
: 왕복은 while문으로 정한횟수만큼 돌고있는데 while문에 들어가는 조건문말고
: 함수중간에 stop_flg에서 1이 발견되면 종료시키는 프로그램을 만들고싶은데...
: 뭘 이용하면좋을까요?
:
:
: 부탁드립니다....
: 현재 while문에 밑에쯤에 if(stop_flg==1)머 이런식으로 검사하고있거든요....
: 조금더 실시간스러운방법은 없을까요? ^^;
|