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
[72957] Re:[답변]thread 와 process
스머팩트 [lego2000] 4051 읽음    2015-09-05 19:42
Process200.zip 1.5MB 예제 소스파일 및 실행파일 입니다.
0. 200개의 프로세스(Thread)

  이렇게 프로그램을 설계해야 할 경우가 가끔 생기죠
  예를들어 ARS와 같은 경우 하나의 프로세스가 하나의 채널을 담당하게 되죠
  200개가 동시에 수행되더라도, 제어를 잠시하고 쉴 때가 많아서 잘 돌아갈겁니다.

1. Process와 Thread

  Unix의 경우 예전(80,90년대) 프로그래머들은 분산 프로세스 모델을 많이 사용했지만
  요즘은 Unix(Linux,Osx), Windows, Java 모두 Thread를 많이 사용하는것 같습니다.

  구현 측면에서 전체적으로 Thread가 프로세스 보다는 2배 이상(느낌상) 신경쓸 일이 많습니다.
  (개인적인 생각이므로 다른 분은 아니라고 할 수 도 있습니다.)
  그러나 프로세스간의 통신측면에서는 Thread가 Process보다는 좀 편리한것 같습니다.

2. Process생성

  프로세스 생성은 배치파일로 해도 되고 WinExec명령으로 해도 됩니다.
  그러나 보다 프로그램 적인 방법으로 한다면 CreateProcess() 함수를 사용해야합니다.
  CreateProcess() 함수를 사용하면 다양한 옵션으로 프로세스를 시작 시킬 수 있습니다.

  보다 자세한 내용은 첨부된 소스의 ExecApplication() 함수를 확인해 보시기 바랍니다.

3. Process종료

    200개의 핸들을 배열에 기억해 두었다가 다음과 같은 명령으로 강제 종료 시킬 수 있습니다.

    TerminateProcess(handle, 0);

4. 공유메모리

  아주 심플한 공유메모리 유닛소스도 첨부파일에 있으니 참고하세요.
  참고용이니 인터넷에서 검색해 보시고 세밀하게 다듬으시기 바랍니다.
  ("C++Builder6.0 / Examples / Apps / IpcDemo" 예제에도 SharedMemory에 대한 구현이 있습니다.)

  공유메모리에서 주의할 것이 하나 있는데 공유메모리가 공통의 메모리를 접근하는 것이지만, 메모리가 단일한것은 아닙니다.
  MapViewOfFile()함수를 사용 하면 View할 메모리 만큼 로컬 메모리가 소모 됩니다.
  결론적으로 아주큰 메모리를 접근 할 때는 조금씩 View를 만들었다가 해제 했다가를 반복해야 합니다.
  (사실 그렇게 쓸 일은 별로 없습니다.)

5. 빌더에서 프로세스를 생성하면 UI가 있어야 하는것 아닌지요.
 
  프로세스 관리 프로그램은 UI(VCL Application)로
  200개의 프로세스는 Console로 만드시는 것이 좋을것 같습니다.
  (C++Builder의 File > New > Other... > Console Wizard)

  위에 설명된 CreateProcess()는 프로세스 생성시에 윈도우를 감추는 기능이 있습니다.
  콘솔로 만들어 테스트와 디버깅을 편하게 하신다음,
  매니저 프로세스가 프로세스를 생성할 때 Console을 감추게 하면 됩니다.

6. 서비스 프로그램

  C++Builder의 경우 서비스 프로그램을 만들기 아주 쉬운 편이지요
  서비스 프로그램으로 만드셔도 되지만, 개발중에는 서비스 프로그램을 고려하지 않을 것을 추천합니다.
  자동로그인과 시작프로그램으로 하는게 좀 편할것 같습니다.
  개발을 마무리 하시고 시간 남을 때 한번 도전해 보실것을 권해 봅니다.


[예제설명]

- 첨부된 소스와 실행 파일은 C++Builder 6.0으로 작성된 것입니다.
- IvrManager.exe는 200개의 프로세스를 관리하는 프로그램 입니다.
- ArsFaxClient.exe는 200개가 될 프로그램 입니다.
- ArsFaxClient.exe는 두개의 인자를 받습니다.

  하나는 Ars인지Fax인지를 구분 하는 것이며(A 또는 F)
  두번째는 채널 번호 입니다.(0~199)

  ex1) ArsFax.exe A 10
  ex2) ArsFax.exe F 11

- 관리프로그램(IvrManager.exe)는 200개의 프로세스를 Console이 보기게/안보이게 생성할 수 있습니다.
  각각을 수행해 보시면 안보이게 실행 하는 것이 UI지연을 방지할 수 있다는 것을 알 수 있습니다.

- IvrManager.exe를 실행해서 버튼 눌러보시면 다 아실듯 합니다.


----------------------------------------------------------------------

하안인 님이 쓰신 글 :
:
: 200여개의 쓰레드를 생성하여
:
: 작업을 한다면 메인쓰레드나 어떤 쓰레드에서 데드락이 걸리면
:
: 모든 작업이 데드락이 걸려서
:
: process 를 200개 생성해서 작업하려고 하는데
: process 200개는 어떻게 생성해야 하는지요.
:
: 200개의 process 는 thread와 마찬가지로 화면이 없고
: 백그라운드에서 작업하면 되는데 
:
: 어떻게 해야 하는지 몰라서요.
:
: 하고 싶은것은
:
: 200개의 쓰레드가 아닌 프로세스를 생성하고
: 200개의 프로세스에서 실행되는 값을 공유메모리를 사용해서 현황을 보여주려고 합니다.
:
: 빌더에서 프로세스를 생성하면 UI가 있어야 하는것 아닌지요.
:
: 아니면 서비스 프로그램으로 만들어야  하는지..
:
: 자문 구합니다.
:
: 두서 없이 적었습니다.
:

+ -

관련 글 리스트
72948 [질문]thread 와 process 하안인 4003 2015/09/02
72957     Re:[답변]thread 와 process 스머팩트 4051 2015/09/05
73079         Re:Re:[답변]thread 와 process 4085 2015/10/12
73081             Re:Re:Re:[답변]thread 와 process 라스코니 4076 2015/10/13
72960         Re:Re:[답변]thread 와 process 3888 2015/09/07
72949     Re:[질문]thread 와 process 라스코니 4117 2015/09/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.