'API & MFC/API & 시스템프로그래밍'에 해당되는 글 24건

  1. 2010.01.12 동기화
  2. 2010.01.04 디폴트 함수
  3. 2010.01.04 API (원 가지고 놀기)
  4. 2010.01.04 API란?
동기화 - 스레드간의 실행 순서를 제어 할 수 있는 기술


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 아몰라


HDC hdc;       //DC의 핸들 HDC 만들기
 PAINTSTRUCT ps;  //그림 그리기에 필요한 여러가지 데이터
 static int x;
 static int y;
  
 switch(iMessage)
 {
 case WM_DESTROY: PostQuitMessage(0); return 0;
 
 case WM_LBUTTONDOWN:
  x=LOWORD(IParam);
  y=HIWORD(IParam);      
  InvalidateRect(hWnd, NULL, TRUE);  //첫번째 인자: 무효화할 윈도우 
                                                      //두번째 인자: 무효화할 사각영역을 지정하되, NULL일 경우 전 영역 
                                                     //세번째 인자: 무효화되기 전에 배경을 모두 지운 후 다시 그릴 것인지 아니면   배경을 지우지 않고 그릴 것인지를 지정한다. 이 값이 TRUE 이면 배경을 지운 후 다시 그리고 FALSE이면 배경을 지우지 않은 채로 다시 그린다.

  return 0;

 case WM_PAINT:
  hdc = BeginPaint(hWnd, &ps);  // 윈도우 핸들과 페인트 정보 구조체
  Ellipse(hdc, x-100, y-100, x+100, y+100); //원그리기
  EndPaint(hWnd, &ps); 
  return 0; 

 case WM_KEYDOWN:
  switch(wParam)
  {
  case VK_LEFT:
   x-=10;
   break;
  case VK_RIGHT:
   x+=10;
   break;
  case VK_UP:
   y-=10;
   break;
  case VK_DOWN:
   y+=10;
   break;
  }
  InvalidateRect(hWnd, NULL, TRUE);
 }

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

서비스  (0) 2010.01.13
IPC란?  (0) 2010.01.12
동기화  (0) 2010.01.12
디폴트 함수  (0) 2010.01.04
API란?  (0) 2010.01.04
Posted by 아몰라
API 는 Application Programming Interface의 약자로서 윈도우 상에서 응용프로그램들을 만들기 위한 함수들의 집합이라고 할 수 있고 API는 운영체제의 한 부분이며 운영체제 그 자체라고도 할 수 있다.(가장 저수준의 라이브러리)

[API의 Positioning] Application - MFC - API - Windows Kernel - HardWare


API는 운영체제가 직접 사용하는 라이브러리이다.(가장 저 수준의 프로그래밍 방법임)


GDI Module

gdi32.dll

화면이나 프린터 같은 장치의 출력을 관장하며 메시지를 관리 (pen, brush, font, bitmap)

UI(User) Module

User32.dll

사용자 인터페이스 객체들을 관리 (window, dialog, menu, cursor, icon, caret)

Kernel Module

Kernel32.dll

Windows OS의 핵심, 메모리관리, 파일 입출력, 프로그램의 로드와 실행 등 운영체제의 기본기능 수행(Process, thread, memory, I/O, Synchronizatoin)




윈도우의 장점

(보조자료)

프로그램 - 코드들의 집합 
프로세스 - 프로그램이 주메모리에 상주
스레드 - 프로세스를 여러개의 스레드들이 실행시킨다.
(Primary thread)


1. 멀티태스킹 - 다수의 프로세스가 메모리상에 상주

2. 멀티스레딩 - 동시에 여러 스레딩이 가능, 멀티스레딩은 멀티태스킹을 포함한다고 생각 할 수도 있다.

3. GUI 환경이다.

4. 동적 연결이라는 개념을 중심으로 동작한다.

5. 프로그램은 시스템에 연결되어 있는 장치의 종류를 몰라도 된다.

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

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