실버라이닝 플레이북



실버라이닝 플레이북 (2013)

Silver Linings Playbook 
8.9
감독
데이비드 O. 러셀
출연
제니퍼 로렌스, 브래들리 쿠퍼, 로버트 드 니로, 크리스 터커, 줄리아 스타일스
정보
로맨스/멜로, 코미디, 드라마 | 미국 | 122 분 | 2013-02-14
다운로드


'기록' 카테고리의 다른 글

d  (0) 2013.05.08
먹고 기도하고 사랑하라  (6) 2013.02.15
4월 3째주  (0) 2012.04.23
화차  (0) 2012.03.10
범죄와의 전쟁  (0) 2012.03.10

인생학교: 일


인생학교: 일

저자
로먼 크르즈나릭 지음
출판사
쌤앤파커스 | 2013-01-11 출간
카테고리
시/에세이
책소개
나의 ‘일’을 사랑하라!일에서 충만함을 찾는 법 『인생학교: 일...
가격비교



'기록 > ' 카테고리의 다른 글

2014 책  (0) 2014.08.06
ㅇㅇ  (0) 2013.05.16
스크럼과 XP  (3) 2013.03.11
뜨거운 침묵  (0) 2013.02.25
독립연습  (0) 2013.02.17

스레드 생성

DWORD WINAPI ThreadFunc(LPVOID temp)

{

printf("dd");

return 0;

}


void main()

{

HANDLE hHandle;

DWORD ThreadID;


hHandle = CreateThread(NULL, 0, ThreadFun, NULL, 0 &ThreadID);


Sleep(10000)

}

정규식 표현

#include <iostream>

#include <string>

#include <boost/regex.hpp>  // Boost.Regex lib

#include <fstream>


using namespace std;

const int BUFSIZE = 10000;


int main(int argc, char ** argv ) 

{

string s, sre;

boost::regex re;

boost::cmatch matches;


cout << "Expression : ";

cin >> sre;


cout <<"str: ";

cin >> s;


try

{

re = sre;

}

catch(boost::regex_error& e)

{

cout << sre << "is not a valid regular expression : " << e.what() << endl;

// continue;

}

if(boost::regex_match(s.c_str(), matches, re))

{

for(int i = 0; i<matches.size(); i++)

{

string match(matches[i].first, matches[i].second);

cout <<"\tmatches[" <<i << "] \ " <<match <<endl;

}

}

else

{

cout << "The regexp \"" << re << "\" does not mach \"" << s <<"\"" <<endl;

}

}


'c/c++' 카테고리의 다른 글

c++ 관리자 권한으로 프로그램 실행시키는 방법  (0) 2014.03.03
스레드 생성  (0) 2013.04.05
스레드 생성  (0) 2013.03.26
MMF(Memory Mapping File) & Shared Memory  (0) 2013.03.26
JSON 사용하기  (0) 2013.03.13

서비스 <-> 응용 프로그램 간의 IPC

서비스 <- 응용 프로그램

서비스는 커널에서 동작 하기 때문에 공유 메모리 생성할때 전역 이름을 주어야 함 

Global\\이름


서비스->응용 프로그램

시스템영역의 프로세스와 일반 유저영역의 프로세스간의 파일 접근 권한이 다름

접근 권한으로 공유 메모리 생성해야 함

Kernel Object Namespaces

Kernel Object Namespaces
 
 
터미널 서비스 서버는 몇몇의 커널 객체(Event, Semaphore, Mutex, Waitable timer, File-mapping 객체 그리고  Job 객체)에
대해서  복합적인 이름을 사용할수 있도록 되어 있다. 전역적인 이름은 클라이언트/서버 형식의 응용프로그램들이
많이 사용한다. 그리고 각 클라이언트 세션(session)은 위에 열거한 객체들을 위해 분리된 독자적인 이름 공간을 가지고 있다.
이것은 모든 프로세스와 서비스가 위에 열거한 객체들을 위해 단일화된 이름공간을 공유한다는 원칙과 차이가 있다는것에
주의해야 한다.
 
이름공간을 클라이언트 세션마다 별도로 구별해서 사용하는것은 동일한 응용프로그램을 여러번 실행했을때,
여러번 실행된 각각의 프로그램이 서로에게 영향을 받지 않고 실행되도록 하기 위함이다.
클라이언트 세션에서 실행한 프로세스들은 기본적으로 세션내의 이름공간을 사용한다. 그러나 프로세스가 객체의
이름을 명시할때 "Global\"과 같은 접두어를 사용해서 이름을 명시한다면 전역적인 이름공간을 사용하게 된다.
 
예를 들어, 아래와 같이 CreateEvent함수를 사용하여 Tipsware라는 이름의 이벤트 객체를 생성하면 이 객체는
세션내에 이름공간을 사용할 것이다.
 
CreateEvent(NULL, FALSE, FALSE, "Tipsware");
 
하지만, 이름을 "Global\\Tipsware"라고 사용하면 시스템의 전역적인 이름공간을 사용하게 된다.
 
CreateEvent(NULL, FALSE, FALSE, "Global\\Tipsware");
 
터미널 서비스 환경에서 실행되는 서비스 응용프로그램들은 기본적으로 전역적인 이름공간을 사용한다. 그리고 
시작 세션(Session Zero, 일반적으로 콘솔 세션 또는 서비스 세션)하에서 실행되는 프로그램도 기본적으로 
전역적인 이름공간을 사용한다. 이것은 전역적인 이름공간을 사용해서 여러개의 클라이언트 세션에 실행된 각각의 
프로세스가 서로 통신하는것을 가능하게 한다.
 
예를들어, 터미널 서비스에 의해서 서버루틴이 실행되었거나 서비스루틴에 의해서 자동으로 서버루틴이 실행된 경우,
서버루틴에서 사용하는 객체들은 전역적인 이름공간을사용하기때문에 클라이언트 세션 또는 일반 사용자 세션에서
서버가 만든 객체를 사용하고자 한다면 객체의 이름을 명시할때, "Global\"이라는 접두어를 이름앞에 붙여서 사용해야 한다.
 
그리고 전역적인 이름공간을 사용하는 또다른 경우는, 각 세션마다 분리된 이름공간을 가지고 있기 때문에, 각 세션에서
커널객체를 이용하여 세션내에서 실행되는 프로그램에 대햐여 중복실행 체크가 가능하지만 다른 세션에 같은 프로그램이
실행되는것은 체크할수 없다. 따라서 현재 시스템에서 실행중인 모든세션에서 특정 프로그램이 중복 실행되지 않도록 하려면
전역적인 이름 공간을 사용해서 객체를 생성시키고 체크하면 된다.
 
클라이언트 프로세스들이 객체를 생성할때, 자신이 실행되는 세션의 이름공간에 생성하는것을 좀더 확실하게 보장받고
싶다면 "Local\"이라는 접두어를 사용하면 된다.
 
"Local", "Global" 그리고 "Session"이라는 용어는 시스템에 의해서 예약되어져 있기 때문에 커널 객체를 생성할때 이름으로
사용하면 안된다. 하지만 이용어들은 대소문자를 구별하기 때문에 LOCAL, loCAL과 같은 형태로 사용하는것은 문제가되지
않는다. 그리고 터미널 서비스를 제공하지 않는 Windows 2000 제품군에서는 위 용어들이 무시될 것이다.

스레드 생성


#include <windows.h>

#include <process.h>

#include <iostream>


using namespace std;


#define MAX_THREAD  2


DWORD WINAPI ThFunc(LPVOID lpParam)

{

    int n;

    printf("[%d] address of 'n' is %p\n", _threadid, &n);

    printf("[%d] exit\n", _threadid);

    return 0;

}


int main(int argc, char **argv)

{

    int i = 0, nData = 100;

    DWORD dwThID[MAX_THREAD];

    HANDLE hThreads[MAX_THREAD];

    unsigned long ulStackSize = 0;


    memset(dwThID, 0, sizeof(dwThID)/sizeof(dwThID[0]));

    memset(hThreads, 0, sizeof(hThreads)/sizeof(hThreads[0]));


    for ( i = 0; i < MAX_THREAD; i++ )

    {

        hThreads[i] = CreateThread(NULL, ulStackSize, ThFunc, &nData, CREATE_SUSPENDED, &dwThID[i]);

        printf("[%d] start\n", (int)dwThID[i]);

        SetThreadPriority(hThreads[i], THREAD_PRIORITY_HIGHEST);

        printf("[%d] thread priority is %d\n", dwThID[i], GetThreadPriority(hThreads[i]));

        ResumeThread(hThreads[i]);

    }


    WaitForMultipleObjects(MAX_THREAD, hThreads, TRUE, INFINITE);

    printf("thread working is done.\n");


    for ( i = 0; i < MAX_THREAD; i++ )

        CloseHandle(hThreads[i]);


    return 0;

}

'c/c++' 카테고리의 다른 글

스레드 생성  (0) 2013.04.05
정규식 표현  (0) 2013.03.27
MMF(Memory Mapping File) & Shared Memory  (0) 2013.03.26
JSON 사용하기  (0) 2013.03.13
ip/ mac 주소 얻기  (0) 2013.02.25

MMF(Memory Mapping File) & Shared Memory

MMF 랑 Shared Memory랑 다른 건가? 

싶어서 검색 ㄱㄱ


"MMF를 이용하여 Shared Memory를 구현한다"

를 보고 둘이 다른 것임을 알았다



MMF = FILE MAPPING이고, 

파일을 메모리에 연결 하여 메모리에 입출력 하는  것


FILE 을 메모리에 올려 사용하는 것도 포함 (프로세스 <-> 파일)

1. CreatFile()

2. CreateFileMapping

3. MapViewOfFile()


공유 메모리를 이용하여 사용하는 것도 포함( 프로세스 <-> 프로세스 ) 

1. CreateFileMapping()

2. MapviewOfFile()



맞나?ㅠㅠ



'c/c++' 카테고리의 다른 글

정규식 표현  (0) 2013.03.27
스레드 생성  (0) 2013.03.26
JSON 사용하기  (0) 2013.03.13
ip/ mac 주소 얻기  (0) 2013.02.25
서비스  (0) 2013.02.25

서비스 - 프로그램 IPC


서비스->응용프로그램, 응용프로그램->서비스 로의 IPC가 가능하네요.

기본적으로 응용프로그램->서비스로는 User Define 이벤트를 제공하니 문제가 안될 것 같구요.

 

우선 서비스를 아래와 같이 SERVICE_INTERACTIVE_PROCESS 프로세스를 추가하고,

 

 // 서비스를 등록한다.
http://i1.daumcdn.net/icon/editor/spacer2.gif?v=2 hSrv=CreateService(m_hScm, m_szSrvName, m_szDspName, SERVICE_PAUSE_CONTINUE | SERVICE_CHANGE_CONFIG,
  SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START/*SERVICE_DEMAND_START*/,SERVICE_ERROR_IGNORE,SrvPath,
  NULL,NULL,NULL,NULL,NULL);

 

서비스에서의 데이터를 줄 때 저 같은 경우는 Shared Memory RegisterWindowMessage 를 사용했습니다.

데이터는 구조체를 썼구요.

 

서비스에서  Shared Memoery에 데이터를 썼구요.

어플리케이션으로 데이터가 있음을 알려주기 위해 RegisterWindowMessage를 사용했습니다

 

SERVICE_INFO pSer;
     strcpy(pSer.szMessage, tmp);
     CreateServiceShareMemory(&pSer);

 

HWND hwnd = ::FindWindow(NULL, "WaBis Service Manager");
    if(hwnd){
      ::PostMessage(hwnd, WM_SERVICE_MESSAGE, 0, 0);
      //::PostMessage(hwnd, WM_SERVICE_MESSAGE, (WPARAM)&pSer, 0);
     }

 

어플리케이션에서는

ON_REGISTERED_MESSAGE(WM_SERVICE_MESSAGE, OnWaBISEvtMessage) 정의하고,

 

LRESULT CWaBisServiceManagerDlg::OnWaBISEvtMessage(WPARAM wParam, LPARAM lParam)
{
 
 SERVICE_INFO pSer;// *pInfo = (SERVICE_INFO *)wParam;

 

 int isSuccess = ReadServiceSharedMemory(&pSer);
 if(isSuccess){
  //
서비스의 데이터가 있다면
  if(strlen(pSer.szMessage) !=0){
   m_ListBox.InsertString(0, pSer.szMessage);
   if(m_ListBox.GetCount() > 500){
    m_ListBox.ResetContent();
   }
  }
 } 

 

 return 0;
}

 


JSON 사용하기

1.     Json 관련 헤더 파일 포함

A.     autolink.h

B.      config.h

C.      features.h

D.     json.h

E.      json_batchallocator.h

F.      json_internalarray.inl

G.     json_internalmap.inl

H.     json_valuiterator.inl

I.       reder.h

J.       value.h

K.      writer.h

 

2.     소스 파일 포함

A.     json_reader.cpp

B.      json_value.cpp

C.      json_writer.cpp

 

3.     사용 방법

A.     데이터 저장

{       Json::Value root;

        Json::Value encoding;

 

        root["encoding"] = "UTF-8";

 

        Json::Value plugins;

        plugins.append("python");

        plugins.append("C++");

        plugins.append("ruby");

        plugins.append(test);

        root["plub-ins"] = plugins;

 

        Json::Value indent;

        indent["length"] = 3;

        indent["use_space"] = true;

        root["indent"] = indent;

 

        Json::StyledWriter writer;

        std::string outputConfig = writer.write( root );

}

 

 

 

 

'c/c++' 카테고리의 다른 글

스레드 생성  (0) 2013.03.26
MMF(Memory Mapping File) & Shared Memory  (0) 2013.03.26
ip/ mac 주소 얻기  (0) 2013.02.25
서비스  (0) 2013.02.25
const 과 #define  (0) 2013.01.30