Q&A

  • 50/1000초 타이머에 대하여
안녕하세요

50/1000 초 마다 타이머를 발생시키는 프로그래밍을 하고 있습니다.
50/1000 초 마다 특정 작업을 계속 하여 주는것인데요.
일반 타이머로 하니 작업내용을 실행하는 시간이 50/1000초마다 길어서
정확히 타이머가 동작하지 않더군요.

그래서 ThreadTimer 컴포넌트를 이용하여 작업하였는데, 성능이 좋은PC에서만
되는것인지 제 작업용 컴퓨터 이외에서는 엄청난 속도 저하를 보이더라구요.
작업 내용을 최소화 시켜도 정확한 타임을 맞출수가 없구요.

50/1000초마다 특정 작업을 실행해야하는 경우 어떠한 방법을 사용하는 것이 나을까요.
더 간결히 처리 할 수 있는 방법은 없을까요?

질문이 조금 난해해졌네요. 죄송합니다.
5  COMMENTS
  • Profile
    이추형 2002.08.05 21:10
    interval이 1000 이면 1초마다 인데...
    0.05초 마다 작업을 돌려야 한다면 너무 빠른 작업 타이밍이 아닐까요?
    혹 DB라도 한번 읽어야  한다면 DB서버의 LED는 계속 불이 들어와
    있을것 같네여

    이정도라면 0.05초 마다 작업을 돌리는것보다 작업끝나면
    바로 이어서 계속 작업이 돌아가도록 하는건 어떨까요..
    아무래도 그것이 어려워서 시간을 0.05초로 설정하신것 같지만.....

    한개의 쓰레드가 작업을 모니터링하고 작업이 끝나면
    작업을 실행시키는 쓰레드를 기동시켜 주심이 어떨지요?

    궁극적인 답이 되지 못했다면 죄송합니다.
    하루중 아침 9시부터 밤 9시 까지 돌아야 한다면
    이런 컨트롤은 작업을 모니터링하는 쓰레드가 맡아야 겠죠...

  • Profile
    이은호 2002.08.05 23:04
    답변감사드립니다.

    50/1000초(0.05초)로 interval을 정한이유는
    0.05초 마다 지속적으로 마우스의 좌표를 읽기 위함입니다.
    0.05초마다 현재의 마우스 좌표를 읽어 배열에 저장해두구요..
    (물론 이 작업에 따른 부가 작업들도 있습니다.)

    마우스의 움직임을 캡쳐하는 것인데.
    혹시 timer를 이용하지 않는 다른 방법도 있나요?
    답변좀 부탁드립니다.

  • Profile
    이광수 2002.08.06 03:59
    마우스 move이벤트가 오면 시스템 타임을 읽어서 처리하면 되겠죠.
    즉 타이머가 주가 아니라 마우스 이벤트가 주가 되겠죠.

    캡쳐가 되면 play도 가능해야 되겠죠?

    이때는 진짜로 타이머를 쓰시면 됩니다. 임의의 시간 간격을 정하고
    그 시간간격안에 들어있는 가장 최후의 마우스 이벤트를 play하면 됩니다.
    마우스 이벤트가 없으면 건너 뛰면 되겠죠.

    아참 레코드시 시작시에 마우스 위치를 읽어서 data에 넣고
    종료시에도 마우스 위치를 읽어서 넣어주시면 더 깔끔 할 듯..

    뭐 만드시는 지 궁금하네요 ^^;


  • Profile
    이은호 2002.08.06 06:32
    답변 감사합니다.

    마우스 move 이벤트를 저장하는 방법을 초기에 구현했었는데
    이게 move이벤트를 전부다 잡아 넣으려니 x,y 좌표를 가진 레코드(4BYTE)를
    초당 수백내지 수천개를 생산해내 더군요.
    1시간이상 분량을 캡쳐해서 파일로 저장할것이라. 용량이 커지면 안되거든요.
    그래서 타이머를 이용하여 정적인 이벤트 갯수를 받게 된 것입니다.

    다른 방법은 없을까요 ㅜ_ㅜ

  • Profile
    이광수 2002.08.06 10:09
    멀티미디어 타이머라고 하는 것도 있습니다만..
    사용하신 쓰레드 타이머와 동일한 현상이 일어날 가능성이 다분하군요.

    다만 멀티미디어 타이머는 postmessage를 사용하여 메시지 큐에 넣고 작업하는 방법을 씁니다. 즉 쓰레드 타이머 에서도 postmessage로 처리해서 메시지 큐에 넣어서 사용하는 방법도 있겠지요.

    후처리 작업이 많다면 결국 마찬가지로 작업이 느려지지않을까합니다.

    후처리 작업을 마우스이벤트를 받는 때가 아닌 종료 후에 작업하시는 것이
    어떨까합니다.

    아니면 마우스 이벤트를 전부 저장한 후에 compact화 해서
    양을 줄이는 방법도 생각해 보시기 바랍니다.
    실시간으로 compact화 할수도 있겠군요.

    결국 후처리도 종료후가 되어야 겠지만요.

    쉬운길은 별로 없어 보이네요.





    • 이은호
    • 2002.08.05 18:40
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.08.05 21:10
      interval이 1000 이면 1초마다 인데... 0.05초 마다 작업을 돌려야 한다면 너무 빠른 작업 타이밍이 아닐...
    • 이은호
      2002.08.05 23:04
      답변감사드립니다. 50/1000초(0.05초)로 interval을 정한이유는 0.05초 마다 지속적으로 마우스의 좌표...
    • 이광수
      2002.08.06 03:59
      마우스 move이벤트가 오면 시스템 타임을 읽어서 처리하면 되겠죠. 즉 타이머가 주가 아니라 마우스 이벤...
    • 이은호
      2002.08.06 06:32
      답변 감사합니다. 마우스 move 이벤트를 저장하는 방법을 초기에 구현했었는데 이게 move이벤트를 전부...
    • 이광수
      2002.08.06 10:09
      멀티미디어 타이머라고 하는 것도 있습니다만.. 사용하신 쓰레드 타이머와 동일한 현상이 일어날 가능성이...
    • 2002.08.05 03:25
      두가지 방법이 있겠네요. 님이 원하시는 대로, 메인폼을 생성하고, Show하지 않고, 메인폼을 수정하던가, ...
    • 김길현
    • 2002.08.04 07:41
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 고정섭
    • 2002.08.04 04:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상기
      2002.08.04 05:13
      프레임보다는 tScrollBox에다가 이미지를 올려놓고 해보세요 아주 잘 됩니다.그림이 지워지지 않고요.....
    • 이종택
    • 2002.08.03 23:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박준열
      2002.08.04 01:00
      글로 설명하기가 좀,... 암튼  ==>  '''' 하면  ' 이되고 ' &...
    • 이경혜
    • 2002.08.03 23:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.08.04 03:00
      TTreeView 컴포넌트를 사용하면 간단하게 구현할 수 있습니다. 다른 방법은 트리에서 체크박스를 지원...
    • 도니
    • 2002.08.03 22:41
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이영범
      2002.08.07 20:46
      1. 데이터를 가져와서 널값 비교     if Not Query1.FieldByName('Field').IsN...
    • 임형호
      2002.08.03 23:13
      제자리에 interbase가 설치가 안되어있어서... 정확한 답변인지는 모르겠구요. 만약 TTable, TQuery 컴...
    • 도니
      2002.08.06 04:15
      알려주셔서 감사하고요^^ 널값집어넣는거는 해결했는데.. 널값을 가져와서 비교할때.. Table1.FieldValu...
    • ^ㅡ^
      2002.08.03 22:18
      답변 BroderIcons 에서 biSystem Menu =  False biMinimize    &nb...
    • 김기현
    • 2002.08.03 21:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오정민
    • 2002.08.03 20:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오정민
      2002.08.03 21:22
      98과 서버의 mdac의 버전 차이 때문에 그런거였습니다. 둘다 최신버전으로 다운 받아서 설치 해주니 아무...
    • 최은석
    • 2002.08.03 20:18
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.08.05 18:12
      폼을 호출하는 부분에서 아래부분을 체크하시면 될것 같은데요..   for I := 0 to Applicatio...
    • 최은석
      2002.08.05 18:52
      안되는군여....
    • 머슴
      2002.08.05 21:20
        MDICHILD폼이름이 'T'가 포함해서 적어주세요...
    • 델사랑
    • 2002.08.03 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2002.08.03 20:25
      델6도 지원되는건가요? 이름을 보니까 델5용인거 같은데... 6도 지원이 되는거라면...HSLUtils<--요...
    • 김영석
      2002.08.03 20:28
      화랑입니다. ^^ 먼저 TCPServer 서버를 이용할경우를 말씀드리겠습니다.  기본적인 연결은 같...
    • 양상훈
      2002.08.03 13:54
      unit dragDrop; interface uses   Windows, Messages, SysUtils, Variants, Classes, Gra...
    • 이민선
      2002.08.03 15:45
      답변 감사드립니다. 덕분에 필요한 부분을 상당부분 해결하게 되었습니다. 이 질문은 추가적인 것으로 답...
    • 양상훈
      2002.08.03 23:06
      캐시파일을 읽지 않으려면 Drop된 URL과 연결된 캐쉬파일을 지워주면 됩니다. procedure TForm1.WebBrow...
    • 김진아
    • 2002.08.03 02:41
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.08.03 05:03
      hsr/////////////////////////////////////////////////////////// 코딩중 어느곳에서 Checked 값을 바꾸...
    • 머슴
      2002.08.03 04:44
        MouseUp,Mousedown이벤트에서 작성을 해보십시요... procedure TForm1.CheckBox1MouseUp(...
    • 양상훈
      2002.08.03 03:12
      ..
    • ^ㅡ^
      2002.08.03 02:52
      무슨말씀을 하시는지 모르겠습니다 자세하게 설명좀 해주시면 안 될까요 제가 알기로는 마우스로 클...
    • 임형호
      2002.08.03 23:22
      ODBC로 연결하셨다면 우선은 ODBC로 연결이 되는지를 먼저 확인하세요. ODBC로 연결이 되셨다면 십중팔구...
    • ^ㅡ^
      2002.08.03 03:02
      음 일단 MS SQL Server 7.0 에 있는 써비스메니져가 실행 되는지 확인 하셔야 할꺼 같구요 그게 실행 ...
    • 질문맨~
    • 2002.08.03 00:45
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최여옥
    • 2002.08.02 21:59
    • 0 COMMENTS
    • /
    • 0 LIKES