'API'에 해당되는 글 14건

  1. 2010.01.13 서비스
  2. 2010.01.12 IPC란?
  3. 2010.01.12 동기화
  4. 2010.01.04 디폴트 함수
서비스 - 백그라운드에서 실행되는 프로그램 (유닉스식으로 표현하면데몬)

1. WIN32 서비스 - SDK영역
 
2. 드라이버 서비스 - DDK영역(저수준이고 익히는 사람도 드물다)
WinMain
{
윈도우생성 X
}

서비스 하나 만들기 위한 세 가지 프로그램

  • 서비스 프로그램 - 실제로 서비스 코드를 제공하는 프로그램
  • 서비스 설정 프로그램 - 서비스 설치와 제거에 대한 작업을 수행하는 프로그램
  • 서비스 제어 프로그램 - 사용자로부터 명령을 받아 서비스에게 명령을 전달하는 프로그램

'API & MFC > API & 시스템프로그래밍' 카테고리의 다른 글

파이프 추가내용  (0) 2010.01.20
Hooking  (0) 2010.01.15
IPC란?  (0) 2010.01.12
동기화  (0) 2010.01.12
디폴트 함수  (0) 2010.01.04
Posted by 아몰라

Ipc 는 두 프로그램이 상호 통신하며 정보를 교환하는 방법이다.


- 메세지

- 파이프

- 메일슬롯

- 소켓

파일매핑 - 프로세스간에 자원공유

등이 있다.


CreateNamedPipe(파이프명(\\.\pipe\파이프명, Access모드(읽고 쓰기), 파이프유형, 5(같은 파이프 이름 최대의 인스턴스 개수, 4096, 4096, 0(접근을 하기위한 대기시간), 보안기술자); 


메세지 보내는 유형
Stream - 파일같은거 보낼 때  PIPE_TYPE_BYTE 

Dgram   -리얼타임보장 예) 방송   PIPE_TYPE_MESSAGE


CreatenamedPipe()
----------------(1) 이 사이에 클라이언트 접속시 ConnectenamedPipe False로 반환된다.
ConnectenamedPipe(핸들, 0);

if(!Check)&&(GetLastError() == ERROR_PIPE_CONNECTED)) //(1) 상황일시 발생
{
Check = true;
}
if(Check)
{

}

FlushFileBuffer(hfile); //ffulsh와 유사, Disconected 를 해도 문제가 생기는데 운영체제에서 버퍼가 남는 문제가 생길수있다.

직렬화 - 객체정보를 화일에 전송

역직렬화 - 생성자

'API & MFC > API & 시스템프로그래밍' 카테고리의 다른 글

Hooking  (0) 2010.01.15
서비스  (0) 2010.01.13
동기화  (0) 2010.01.12
디폴트 함수  (0) 2010.01.04
API (원 가지고 놀기)  (0) 2010.01.04
Posted by 아몰라
동기화 - 스레드간의 실행 순서를 제어 할 수 있는 기술


Loop  : 자원 사용중
(1) ConTex Switching 이 발생? Atomic Operation
자원을 비 신호 상태로
               ---------------------------
Doit                                   임계구간(Critical Section) - Race condition을 방지
               ---------------------------
자원을 신호 상태로

ConTex Switching를 허용안하는 방법 -  타임인터럽트를 Disable하면 되지만 사용자 수준에서는 변경이 힘들다.


CRITICAL_SECTION cs;

Initialize CriticalSection(&cs);  //프로그램시작시

while(1)
{
-----------------
if(flag)
{
flag = false;                        Atomic 하게 만들었다.
doit();
------------------
flag=true;
break;
}
}
                                                
DeleteCriticalSection(&cs) //종료시
 



Mutax(상호배제)


신호상태 - 커널객체를 사용 할 수있는 상태
비신호상태  - 커널객체를 사용 할 수없는 상태

WaitForSingleObject(HANDLE hHAndle, DWORD dwMilliseconds);  //hHandle 이 지정하는 하나의 동기화 객체가 신호상태가 되기를 기다린다.

두번째 인자를 INFINITE로 지정하면 무한정 기다린다.


HANDLE CreateMutex(null, bool, lpName (뮤텍스를 구분하기위함)); //통상 프로그램 시작시

OpenMutex

CloseHandle(handle); //죵료시

비신호상태로 만들겠다 내가 점유하지 않은상태에서 만들겠다.

if(GetLastError() == ERROR_ALREADY_EXISTED)  // 이면 이미 프로그램이 가동중이다.

HANDLE hMu = CreateMutex(null, false, "hello");
{
if(get)
{
closeHandle(hMu)     //시작시 한번 들어오고 다음 스레드는 여기서 해제시킨다.
return;
}
}


세마포어 - 제한된 일정 개수를 가지는 자원을 보호하고 관리(뮤텍스와 유사하나 다수의 갯수를 관리)


HANDLE CreateSemaphore(보호기술자, 5(최대사용개수), 5(count초기값), 세마포어를 구분하기위한 문자열);
// 세마포어 카운트가 다 차야 비신호 상태가 된다.

이벤트

HANDLE CreateEvent(보안기술자,  ManualReset(자동이냐 수동이냐), bInitialState ,  
WaitForSingleObject(handle, INFINITE);
{
dout();
SetEvent(handle);
}
// ManualReset - True 이면 Set을 안한다!무한정 기다리기만 한다.
// SetEvent(hwnd); 이 필요
SetEvent()     //이벤트를 신호상태로
ResetEvent() //이벤틀를 비신호상태로





 

'API & MFC > API & 시스템프로그래밍' 카테고리의 다른 글

서비스  (0) 2010.01.13
IPC란?  (0) 2010.01.12
디폴트 함수  (0) 2010.01.04
API (원 가지고 놀기)  (0) 2010.01.04
API란?  (0) 2010.01.04
Posted by 아몰라


#include <windows.h>


LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch( msg )
 {
 case WM_LBUTTONDOWN:
  return 0;
 case WM_RBUTTONDOWN:
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return DefWindowProc(hwnd, msg, wParam, lParam);
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
       LPSTR lpCmdLine, int nShowCmd)
{
 // 1. 윈도우 클래스 만들기
 WNDCLASS wc;
 wc.cbWndExtra   = 0;
 wc.cbClsExtra   = 0;
 wc.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.hCursor    = LoadCursor(0, IDC_ARROW);
 wc.hIcon    = LoadIcon(0, IDI_APPLICATION);
 wc.hInstance   = hInstance;
 wc.lpfnWndProc   = WndProc;   // DefWindowProc;
 wc.lpszClassName  = "First";
 wc.lpszMenuName   = 0;
 wc.style    = 0;

 // 2. 등록(레지스트리에)
 RegisterClass(&wc);

 // 3. 윈도우 창 만들기
 HWND hwnd = CreateWindowEx( 0,     // WS_EX_TOPMOST
     "first",    // 클래스 명
     "Hello",    // 캡션바 내용
     WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT , 0, CW_USEDEFAULT, 0, // 초기 위치
     0, 0,   // 부모 윈도우 핸들, 메뉴 핸들
     hInstance,  // WinMain의 1번째 파라미터 (exe 주소)
     0);   // 생성 인자

 

 // 4. 윈도우 보여주기
 ShowWindow(hwnd, SW_SHOW);
 UpdateWindow(hwnd);
 

 // 5. Message
 MSG msg;
 while( GetMessage( &msg, 0, 0, 0 ) )
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 0;
}

'API & MFC > API & 시스템프로그래밍' 카테고리의 다른 글

서비스  (0) 2010.01.13
IPC란?  (0) 2010.01.12
동기화  (0) 2010.01.12
API (원 가지고 놀기)  (0) 2010.01.04
API란?  (0) 2010.01.04
Posted by 아몰라
이전버튼 1 2 이전버튼