목록전체 글 (57)
Creative Motive
데브피아 까막 님 작성 (http://crowback.tistory.com/207)지난 장에서는 실제 서비스 몸통을 만들기 전에 만들어진 서비스를 설치/제거하는 아주 초간단 구현을 살펴보았다.원래는 이번장에서 서비스를 중지, 일시중지, 재시작 상태를 변경시키는 기능에 대하여 진행하려고 하였으나 몇몇 분의 요청에 의하여 지금까지 열거된 기능중에 필요한 함수 몇개를 먼저 소개하고자 한다.1. 사용자 계정에 권한을 할당하는 UserPrivileges 함수.#define TARGET_SYSTEM_NAME L"."LSA_HANDLE GetPolicyHandle(){ LSA_OBJECT_ATTRIBUTES ObjectAttributes; WCHAR SystemName[] = TARGET_SYSTEM_NA..
데브피아 까막 님 작성 (http://crowback.tistory.com/206)이번 장에서는 서비스의 몸통을 만들기 전에 서비스를 인스톨 하는 부분과 제거하는 부분에 대하여 알아볼 것이다.서비스를 설계할 때 기능도 당연히 중요하지만 어떤 동작 상태를 주어 기동하게 할것인가에 대하여 생각해 보아야한다.1. 먼저 서비스 이름이나 설명을 어떻게 설정할 것인가? -> 단순한 문제이지만, 서비스 이름이나 실행파일명, 그리고 이에 따른 설명은 해당 서비스가 어떠한 기능을 하게 되는지 그리고, 사용하는 사람들이 직관적으로 알아 볼 수 있도록 명확하게 하여야 한다.2. 서비스를 구동 시키는 계정은 어떻게 처리할 것인가? -> 보통 아주 일반적으로 디폴트 계정 즉, SYSTEM(Local Syst..
데브피아 까막 님 작성 (http://crowback.tistory.com/203)지난 내용에서 서비스가 구동되는 순서는 어떠한지, 또한 서비스 프로그래밍의 장/단점은 어떠한지에대하여 간략하게 살펴보았다. 자세한 기술 관점으로 넘어가기전에 서비스 관리자에서 (services.msc)살펴볼 수 있는 항목들에 대하여 간략하게 설명하고, 이러한 항목들이 프로그래밍되는 API 와 연관되는지살펴보도록 하겠다. 전체적으로 외향적인 부분을 살펴보는 것이므로, 주의깊게 살펴보지 않아도 작업하는데 지장은 없다.가장 일반적으로 접하게 되는 GUI로써, 서비스를 시작/중지/일시 정지 시킬 수 있고 서비스의 현재 동작상태를 살펴볼 수 있다. 해당 서비스가 어떠한 계정으로 구동중인지도 확인이 가능하다.1. General (일반..
데브피아 까막 님 작성 (http://crowback.tistory.com/202)윈도우 서비스 카테고리에서 이것 저것 서비스 프로그래밍을 하면서 필요한 것들을 하나 둘 씩 진행해 보았다.이런 것들을 정리하여, 서비스는 왜 필요한 것이며? 무엇 때문에 사용하는가?어떻게 동작되며, 과연 어느 순간에 실행되는지...서비스는 일반 콘솔 프로그램과 무엇이 다른지 하나씩 정리를 해보려한다.일반적으로 윈도우가 기동되는 과정을 단순화 시키면 아래 그림과 같다.즉, 서비스 프로그램은 윈도우가 부팅된 이후에, 로그온 되지 않은 상태에서도 구동되어진다는 큰 장점을 가지게 된다.또한 일반적으로 Local System Account 로 구동되기 때문에 시스템을 제어하는데 필요한 가장 강력한권한을 가진다고 말할 수 있다. 서비..
데브피아 김경진님 작성 (http://devmachine.blog.me/182050046) concurrent_unordered_map concurrency::concurrent_unordered_map 클래스는 std::unordered_map 클래스에 대응하는 병렬 컨테이너입니다. key/value pair 원소를 컨테이너에 추가하여 key를 가지고 value 값을 검색하는 전형적인 dictionary 개념의 컨테이너죠. concurrent_unordered_map 클래스는 여러 스레드 또는 task 에서 컨테이너를 공유하여 동시에 원소를 추가하고 엑세스 하려는 경우에 유용하게 사용될 수 있습니다. 먼저 std::unordered_map 과의 차이점부터 살펴보도록 하죠. erase, bucket, b..
데브피아 김경진님 작성 (http://devmachine.blog.me/181647367) 병렬 컨테이너와 오브젝트 PPL에서는 thread-safe 하게 사용할 수 있는 몇 가지의 병렬 컨테이너와 오브젝트를 제공합니다. 먼저 병렬 컨테이너는 기존 STL 컨테이너와 매칭되며 주요 메서드를 thread-safe 하게 사용할 수 있습니다. 그 예로 concurrency::concurrent_vector 클래스는 std::vector 클래스와 비슷하며 컨테이너 원소를 여러 스레드에서 동시에 추가할 수 있습니다. 하지만 앞서 주요 메서드라고 언급하였듯이 모든 메서드가 thread-safe 한 것은 아니라는 것은 알아두셔야 합니다. 그리고 앞으로 설명하게 될 병렬 컨테이너들은 모두 STL 컨테이너와 매칭되므로 차..
데브피아 김경진님 작성 (http://devmachine.blog.me/180972039) Parallel 정렬 PPL에서는 std::sort 함수를 대체할 수 있는 세 가지 버전의 병렬 처리 함수를 제공합니다. 바로 concurrency::parallel_sort, concurrency::parallel_buffered_sort, concurrency::parallel_radixsort 함수인데요, 이 세 가지 정렬 함수는 매우 큰 데이터셋을 정렬하는 경우 또는 정렬에 필요한 비교 구문이 복잡하여 시간이 오래 소요되는 경우에 아주 유용하며 성능 향상에 큰 도움이 됩니다. 먼저 parallel_sort 함수와 parallel_buffered_sort 함수는 std::sort 함수와 마찬가지로 비교 기반의..
데브피아 김경진님 작성 (http://devmachine.blog.me/177199502) Forwarding Problem 이번 강좌는 이해를 돕기 위해 자세한 설명 보다는 예제 위주로 설명을 드리려고 합니다. 쉽지 않은 개념이긴 하지만 차근 차근 따라오신다면 모두 이해가 될것으로 생각됩니다. 그럼 시작하겠습니다. ^^ 먼저 구조체 W, X, Y, Z를 정의하는데 각각의 구조체는 생성자의 파라미터 타입으로 const와 non-const 참조 타입을 받아들이는 4가지 조합을 가지게 합니다. struct W { W(int&, int&) {} }; struct X { X(const int&, int&) {} }; struct Y { Y(int&, const int&) {} }; struct Z { Z(con..