검색결과 리스트
ums에 해당되는 글 2건
- 2013.03.04 UMS를 사용한 스레드 만들기
- 2009.06.26 Windows Server 2008 R2의 새로운 기능 ~ 온라인 서버 개발자로서 흥미로운 것
VC10에서 병렬 프로그래밍 라이브러리인 Concurrency Runtime 이라는 것이 추가되었습니다.
Concurrency Runtime은 OS의 스레드 관리 보다 좀 더 지능적으로 관리를 하며, Concurrency Runtime은 Windows 7에서 새로 추가된 UMS(User Mode Scheduler)를 사용하고 있습니다.
Windows7 이상의 OS에서 64비트 프로그래밍을 한다면 UMS를 사용하는 것이 좋습니다. 그런데 UMS를 사용하는 방법에 대해서 잘 나온 것이 없습니다. 그래서 UMS를 알아도 활용할 방법이 애매한데 이 문제를 해결하는 방법은 Concurrency Runtime의 스케쥴러에서 스레드를 만드는 것입니다. 기존의 스레드를 만드는 방법과 거의 비슷해서 손 쉽게 이전 코드에서 수정도 가능합니다.
사용하는 방법은 MSDN의 예제를 참고하면 됩니다.
http://msdn.microsoft.com/en-us/library/vstudio/ee624185.aspx
제가 간단하게 설명하자면....
아래의 헤더 파일을 포함합니다
#include <concrt.h>
네임스페이스를 선언합니다.
using namespace Concurrency;
스레드에서 호출할 함수를 정의합니다.
void __cdecl MyThreadFunction(LPVOID param);
스레드에 넘겨줄 데이터를 정의합니다.
typedef struct MyData {
int val1;
int val2;
event signal;
} MYDATA, *PMYDATA;
Concurrency Runtime의 스케쥴러에서 스레드를 생성합니다.
CurrentScheduler::ScheduleTask(MyThreadFunction, pData);
위의 MyData 구조체에서 event signal 이 사용되는 경우는 만약 메인 스레드에서 생성한 워커 스레드가 종료 될 때까지 대기하고 싶을 때 사용하면 좋습니다.
메인 스레드에서 아래와 같이 하면 워커 스레드가 종료될 때까지 대기 합니다.
pData->signal.wait();
워커 스레드는 스레드가 종료될 때 아래와 같이 해서 이벤트를 발생하여 메인 스레드의 대기를 풀어줍니다.
pData->signal.set();
댓글