C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[42480] Re:음 그런가용
크레브 [kkol] 993 읽음    2005-11-15 13:20
: m->set_work();
: while(m->is_done())
:   NULL;
: show_msg("done");

이런 구조에서는 모터 동작이 완료될때까지
while loop에서 기다리고 있는거군요

이런 방식으로 제어하려면 쓰레드 쓸수 밖에 없습니다.
타이머에서 이렇게 기다리면 UI가 멈춰 버리니까요
모터 동작이 100 msec가 걸리든 1초가 걸리든 그 시간동안은 메시지 처리가 안됩니다.

타이머에서 사용하려면 다음과 같이 기다리는 부분(loop)이 없어야 합니다.

m->move();
if(m->is_done()==true)
{
   // motion done 처리
}
else
{
  return ; // 또는 다른 루틴 수행
}

모션 제어에서 일반 타이머를 쓰는경우도 있고 멀티미디어 타이머를 써서 하는 경우도 있습니다.
제대로만 만들면 상관없습니다.
다만 가장 권장할 만한 방법이 멀티쓰레드를 이용하는것이죠




마술감자 님이 쓰신 글 :
: 궁금한게 생겼네요.
: 나중에 하드웨어 관련 답변을 달때 참고하고 싶습니다.
:
:
: 대충 아래와 같은 코드 구조겠지요
:
: m->set_work();
: while(m->is_done())
:   NULL;
: show_msg("done");
:
: 작업하는 환경에서의 모터가 어느 수준의 인터페이스를 갖는지 궁금합니다.
:
: 일반적인 모터들이 set_work() 또는 is_done()을 호출하고 나서
: 다시 제어권을 얻는데까지 각각 걸리는 block time이 얼마나 되나요?
:
: 전 해당 업종과 관련이 없으니 코드를 봐야만 어떤게 좋은지 판단할 수 있기 때문에..
: 모터에 작업을 걸고, 끝날때까지의 시간이 아니라, 2가지 함수를 콜하고 되돌려 받기까지 각각의 시간이 궁금합니다.
:
: 그리고 LED와 관련된 제어 시간도 알고 싶습니다.
:
: phenix 님이 쓰신 글 :
: : 댓글이 메일로 와서 봤습니다. 마술감자님과 싸우자는 것 아니니 충분히 읽어보고 판단하시길...
: :
: : 저는 지난 6년간 motion controller 여러종류를 사용해왔고 지금도 현업에서 일하고 있습니다.
: : 아마 질문자는 timer에서 while loop를 통해 motion done을 확인했을 겁니다. (소스는 보지 못했지만...)
: : 질문자는 polling방식과 event방식중 polling방식을 선택했고 이것을 timer안에 while loop를 통해 상태를 파악했겠지요. 그래서 GUI가 원활히 동작하지 않았겠지요...
: : 저도 질문자와 같은 초보자시절에는 같은 착오를 범했고 그것에 polling 방식에 대한 가장 안정적인 해결방법이 thread를 사용하는 것이고 이는 저 뿐만 아니라 이 업종에 종사하는 대다수의 사람들이 사용합니다.
: :
: : 단축구동에서는 마술감자님의 답변처럼 하면 될수도 있습니다. 그러나 2,3,4... 여러축이 구동하게 된다면 그리고 여러 IO와 엮이게 된다면 님의 답변방법으로는 한계에 부딛히게 됩니다.
: :
: : 물론 thread를 사용해야 겠다면 당연히 동기화를 알아야 겠지요.
: : 그러나 이것을 공부하고 말고는 질문자가 선택할 사항입니다.
: :
: : 하지만 이러한 방법이 있으나 당신 수준에서는 이정도의 방법을 써라 하는것은 아는자의 논리가 아닐런지요...
: : 정말 "장기적"으로 질문자를 생각한다면 어느 방법이 맞을까요?
: :
: : 그리고 질문자의 의도를 정확히 파악하신다면 질문자의 질문중 "서로 불리할려고 해도 쉽게 안되더군용", "서로 다르게 동작하게끔 하는 방법" 이란것의 의미는 다른 process를 사용하고 싶다는 의미가 아닐런지요.
: :
: :
: :
: :
: :
: : 마술감자 님이 쓰신 글 :
: : : 쓰레드를 쓰라고 하려면 코드를 정확히 판단하고 답변을 달아야 합니다.
: : : 모터 관련 코드가 다음과 비슷하다면 쓰레드를 사용하지 않아도 충분히 코딩이 가능합니다.
: : :
: : : while(is_done() == false)
: : :    NULL;
: : :
: : : 쓰레드를 사용하면 코드가 위와 같던, 아니던 100% 해결은 될 겁니다.
: : : 그런데 특정 기술이나 패턴을 사용하지 않아도 될 곳에 사용하면 부작용이 더 큽니다.
: : :
: : : 멀티 쓰레드를 사용하려면 충분한 학습을 하고 해야 하는데
: : : 무작정 적용하고, 안되니까 질문 하고, 또 답글 달면 1차적으로 해결 하고 반복하게 됩니다.
: : : 그 증거로, 바로 위에 질문글이 올라왔지요 [thread내에서 다른 클래스 참조...]
: : :
: : : 질문자의 학습수준을 생각해서 답글을 달았으면 좋겠습니다.
: : :
: : : 견웅님도 제가 분명히 코드를 더 보여달라고 했는데,
: : : 마음이 급해서 그러셨겠지만 답변자의 의견을 고려하시는것이 장기적으로 도움이 됩니다.
: : :
: : : phenix 님이 쓰신 글 :
: : : : thread 사용하세요.
: : : : 이게 정확한 답입니다.
: : : :
: : : : GUI에서 (정확히 GUI thread에서)
: : : : motor의 motion done check하랴 (아마도 님의 while loop의 목적?)
: : : : GUI LED 구동하랴 정신이 없을 겁니다.
: : : : motion과 관련된 부분은 thread를 사용하여 GUI를 쉬게 해주세요.
: : : :
: : : : 견웅 님이 쓰신 글 :
: : : : : 이번에 프로제트 하면서  모터를 구동하는 작업을 하게 됐습니다...
: : : : : 모터보드에서 제공하는 라이브어리를 이용해서 작업을 합니다..
: : : : : 그런데 문제가 생겨서 음..  여기에 질문을 올립니다..
: : : : :
: : : : : 현재 모토를 구동하면서 문제가 타임으로 해서 함수를 실행합니다.
: : : : : 모토구동하는 함수인데..  또다른 타임만들어서  led를 움직이는 작업을 합니다....
: : : : : 이러한 작업을 하는데 있어.. 문제가 생깁니다...
: : : : : 둘다 따로 돌아야 하는데.. 현재 모터가 많은 작업을 하면 led가 느리게 움직입니다.
: : : : : 항상 모터와 같이 움직이는 현상이 발생합니다..
: : : : : 현재 둘다 동기화가 된것같은데.. 서로 불리할려고 해도 쉽게 안되더군용...
: : : : : 음.. 현재 모터쪽에 while(0) 이러한 구문이 좀 있습니다.  
: : : : : 그래서 Application->ProcessMessges를 해서 해보왔지만 해결이 안되더군용...
: : : : : 음... 서로 다르게 동작하게끔 하는 방법이 없나 해서..
: : : : : 질문드립니다. 많은 의견좀 주세요..   ^^

+ -

관련 글 리스트
42457 timer의 동기화 문제... 견웅 1115 2005/11/14
42472     Re:timer의 동기화 문제... phenix 1064 2005/11/15
42474         무작정 쓰레드를 쓰라고 하는건 좋은게 아닌것 같네요.. 마술감자 1211 2005/11/15
42477             Re:무작정 쓰레드를 쓰라고 하는건 좋은게 아닌것 같네요.. phenix 1149 2005/11/15
42478                 음 그런가용 마술감자 995 2005/11/15
42486                     Re:음 그런가용 phenix 879 2005/11/15
42490                         Re:Re:음 그런가용 마술감자 983 2005/11/15
42480                     Re:음 그런가용 크레브 993 2005/11/15
42485                         Re:Re:음 그런가용 마술감자 932 2005/11/15
42487                             Re:Re:Re:음 그런가용 크레브 980 2005/11/15
42491                                 Re:Re:Re:Re:음 그런가용 마술감자 996 2005/11/15
42458     Re:timer의 동기화 문제... 마술감자 1230 2005/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.