|
강영준 님이 쓰신 글 :
: 헬프 찾아 봤는데.. 찾지를 못하겠드라구요..
:
: bcb를 다시 설치 하면서 최소 설치를 했드니만.. 헬프가 잘 안뜨드라구요..
:
: WaitForSingleObject에 대해서 설명좀 해주세요.. 사용방법도 알려 주시면 고맙겠습니다.
세마포어를 사용한 예:
예를 들어, 자원이 2개인데 그 것을 사용하려하는 스레드가 3개 이상인 경우 그대로 방치하면 한 자원에 두 개 이상의 스레드가 동시에 읽기/쓰기를 할 가능성이 있음. 그렇게 되면 원하는 결과가 나오지 않게 됨.
이런 경우, 총 자원수가 몇 개이고 현재 사용할 수 있는 자원은 몇개인지를 관리해서 사용가능한 자원이 없다면 자원을 사용하려 하는 스레드는 기다려야 함. 이 역할을 하는 함수가 WaitForSingleObject임.
HANDLE Semaphore; //전역변수
Semaphore = CreateSemaphore(NULL,2,2,NULL); //프로그램 시작 시 또는 최초 사용시
WaitForSingleObject(Semaphore,INFINITE);//이 함수가 정상 반환되면 사용가능한 자원수가 1감소.
//여기에서 자원을 가지고 작업 수행
//2개의 자원 중 어떤 것이 사용중인지를 검사한 후
//사용중이지 않은 자원에 작업을 해야 함.
ReleaseSemaphore(Semaphore,1,NULL); //사용 가능한 자원수를 1 늘림.
CloseHandle(Semaphore); //프로그램 종료 시 또는 더이상 필요 없을 때
:
: 그리고 쓰래드의 헨들을 잡는 방법은 어떻게 되나요?
:
: 이넘을 쓰래드에 넣어 봤는데.. 전혀 반응이 없드군요..
:
:
TThread::Handle
|