Q&A

  • 다중쓰레드의 동기화 방법이 궁금합니다.
찾아보면 많이 있을 줄 알았는데, 의외로 찾기가 힘드네요.

미로에서 유저와 몇개의 NPC가
랜덤한 위치에서 생성되어 길을 찾는걸 쓰레드로 만들어 볼려고 합니다.
유저는 이동을 할 수도 있고, 안 할 수도 있습니다만,
NPC는 일정한 속도로 계속 길을 찾아 움직이게 할 생각입니다.
그런데 그냥 돌려봤더니 눈에 띌 정도로 처리속도의 차이가 있더군요.

유저의 이동속도(유저가 딴짓안하고 계속 움직일때 속도/딴짓해도 그정도 속도로 계속 이동)와
동기화를 시켜줘야 하는데 어떻게 하는지 모르겠습니다.
synchronize에 해법이 있을까 싶어서 한델을 뒤져봤지만
적절한 예시를 찾지는 못하겠네요. ^^;
2  COMMENTS
  • Profile
    천희택 2005.07.02 09:02
    저도 초보라 도움이 될지 모르겠습니다..

    4가지 방법이 있는데 CriticalSection, Mutex, Semaphore, event가 있습니다.

    CriticalSection의 경우
    InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection
    이 네가지를 사용합니다.

    Mutex의 경우
    CreateMutex, WaitForSingleObject, ReleaseMutex, CloseHandle이 네가지 함수를 사용하고

    Semaphore의 경우
    CreateSemaphore, WaitForSingleObject, ReleaseSemaphore, CloseHandle

    Event의 경우
    CreateEvent, SetEvent, CloseHandle을 사용합니다..

    각 함수의 내용은 다행히 델파이 도움말에 있네요... ^^

    과연 송시중님이 이 글을 읽으실지...
  • Profile
    도끼로이마까 2005.06.10 21:11

    님께서 말씀하시는 synchronize는 님구현하려는 내용과 전혀 상관없습니다..
    델파이 Thread의 synchronize는 단순히 델파이 vcl이 thread safe가 아닌관계로
    thread내에서 vcl을 건드리는 작업을 할 경우에,, 그 작업을 랩핑해주는 함수입니다..
    동시에 한 쓰레드에서만,,vcl을 건드릴 수 있게 하기위해서죠,,이렇게 하지않으면,,
    예기치못한 결과가 발생할수있습니다...

    • 도끼로이마까
      2005.06.10 20:58
      질문의 의도가,,,C함수를 델파이로 고치는건가여,, 아니면,,C함수가 dll형태로 되어있는데,,이것을 델파...
    • nilriri™
      2005.06.10 07:20
      다를게 없는데...왜그런지 모르겠네요..ㅡㅡ; ADO인가요? BDE인가요?
    • 크로이첼
      2005.06.11 02:35
      역시 안대니 별의 수를 다 동원하네요. 걍 프로시져에서 나오는 결과값을 임시테이블만들어서 거기다 값 ...
    • 백승석
    • 2005.06.09 20:32
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.06.10 21:07
      Label이나 ProgressBar에 프로퍼티를 설정하신후, Repaint를 호출해주시면 됩니다.. Repaint는 WinCont...
    • 송 시중
      2005.06.09 22:35
      작업을 쓰레드화 시켜서 우선순위를 낮추거나, 화면과 동기화 한다던지 루프안에 Form.ProcessMessage...
    • 남충희
      2005.06.12 05:17
      다른 방법도 있겠지만 FTP의 경우 WinINet의 콜백함수에서 ProcessBar를 나타내는것이 일반적입니다. 그리...
    • 전상현
    • 2005.06.09 16:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2005.06.09 18:19
      Help 에 이렇게 나와 있네요. Note:        Dotted or dash...
    • 송 시중
    • 2005.06.09 09:24
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 천희택
      2005.07.02 09:02
      저도 초보라 도움이 될지 모르겠습니다.. 4가지 방법이 있는데 CriticalSection, Mutex, Semaphore, ev...
    • 도끼로이마까
      2005.06.10 21:11
      님께서 말씀하시는 synchronize는 님구현하려는 내용과 전혀 상관없습니다.. 델파이 Thread의 synchroni...
    • 허학송
    • 2005.06.09 05:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.06.09 09:27
      (grid.cells[1,r] <> '  ')  이게 정확히 원하는 결과를 리턴하나요? Trim()...
    • 허학송
      2005.06.09 19:50
      감사합니다. 역시 제가 초보긴 초보인가 보군요. 이런 방법을 생각 못하다니. 많이 배우고 있습니다.
    • nilriri™
      2005.06.09 22:22
      OnCalcFields 이벤트를 잘못 이해하신듯 합니다. filter를 왜 해주시는지? 그리고..filter string을 ...
    • 크로이첼
      2005.06.09 23:33
      답변 감사합니다. 제가 그냥 어제 원하는 결과값을 얻는 프로시져로 만들어 버렸네요 ^^; 급하다 보니 다...
    • 장태원
    • 2005.06.08 22:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 민스맘
      2005.06.09 00:53
      우선 Query 에서 Row를 제한해서 가져오는 방법은요 oracle : select * from a_Table where rownu...
    • 황성욱
      2005.06.09 02:47
      DATA ACCESS 쪽에 ClientDataSet이라는 콤포넌트가 있습니다. 이걸 이용하시면 가능 한데.. MIDAS나 data...
    • 오승섭
      2005.06.10 19:09
    • 호야
    • 2005.06.08 20:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2005.06.09 01:26
      델파이 시디를 가지고 계신다면 시디안에 인스톨쉴드 Express라고 델파이용으로 번들된 버전이 있습니다 ...
    • 유응철
      2005.06.09 02:40
      델파이에 번들로 제공된 것이 어렵다면, 한글설명이 잘 되어 있는 installshield Factory 2.70 인가가 있습...
    • 임정미
      2005.06.09 07:10
    • 이승민
      2005.06.08 18:16
      음 rs232c 를 사용할때 여러가지 방법들을 사용하는데 그중 제가 쓰는 방법은 comport 당 하나의 Timer 나 ...
    • 프란시스
      2005.06.08 22:49
      쓰레드를 하나  발생(create) 시켜서 지속적으로 read하도록 하는 방법은 어떤것인지요? 부탁드...
    • 한만교
      2005.06.09 03:14
      제가 하는 일반적인 그러나 정석(반드시 정석이라 할 순 없지만..ㅎㅎ)이라 할수 있는 방법입니다.. 쓰...
    • 프란시스
      2005.06.09 22:53
      전 일단 급해서 그냥 thread를 생성해서 바로 free시키는 방법으로 그냥 진행했습니다. 별문제없이 잘 처리...
    • 도끼로이마까
      2005.06.09 04:38
      어떤 크기를 말씀하시는건지,,, 자세하게 질문해주세여,,
    • 최용일
      2005.06.08 06:49
      안녕하세요. 최용일입니다. 화면이 바뀔때마다 그 화면에 대한 정보를 순차적으로 기록해놓으세요. 그럼...
    • 델초보
      2005.06.08 23:15
      드디어 답변이 ^^;; 답변 감사드리고요. 저도 그런 생각까지는 했는데 지금 만드는 프로그램이 장비와...
    • 최용일
      2005.06.08 23:52
      안녕하세요. 최용일입니다. 데이터를 뿌려주는 화면이라면... 화면에 대한 정보는 그 데이터들이 되겠죠...
    • 델초보
      2005.06.09 02:10
      답변감사합니다. 지식이 짧아서 하나하나 진행하기가 매우 힘드내요. 수고하세요...
    • 한상민
      2005.12.22 00:55
      다들 넘 힘들게 생각하는거 같아서 6개월 지난 후 답변 올립니다. procedure TForm1.WebBrowser1C...
    • 홍미자
    • 2005.06.08 02:36
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이승민
      2005.06.08 18:31
      델파이의 몇 버젼을 사용하신지 몰라서 그냥 제가 알고 있는 기초적인 내용만 말씀드리겠습니다. 델파이의...
    • 주웰
      2005.06.08 19:01
      절대 태클아닙니다 ^^;; 오해 없으시길... 이승민님께서 설명하신것 중에 동기식은 Linux, Unix 에서 보...
    • 홍미자
      2005.06.09 00:42
      ..
    • 정찬희
      2005.06.08 04:48
      위로 이동하는 코드에서   <!--CodeS--> if ( ListBox1.ItemIndex <> 0) then &l...
    • 오경태
    • 2005.06.08 01:43
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 천희택
      2005.06.08 17:48
      리눅스에 msyql을 설치하셨으면... 우선 DB를 만드셔야 합니다. 그리고 테이블을 만드시고 .... 그리...
    • 오경태
      2005.06.08 19:16
      감사합니다..제가 이곳싸이트에 올린 질문중에 처음으로 친절히 답해주셨습니다... 또 하룻밤새워..db ...
    • 박정훈
      2005.06.09 19:17
      강의실에 가면 MySQL+Zeos 연동 강좌가 올라가 있답니다.. 저도 맛난거 사주시나요??? 푸흐흐... 농담이었...
    • 호야
    • 2005.06.08 01:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.06.08 18:58
      안녕하세요. 최용일입니다. 델파이 자체적인 기능엔 없습니다. GExpert라고 하는 Third-party Add-on...
    • LDS
      2005.06.08 01:54
      그냥 참고 삼아 232c통신의 경험을.... 232c에 물려 있는게 " PDA "라고 가정 할게요 PDA에서는 ...
    • 프란시스
      2005.06.08 02:58
      네 감사합니다 근데 프로토콜은 괜찮은데요. ㅎㅎ 백그라운딩 프로새서로 하려구요 그냥 threed하...