190705-4 - _DLLPRE extern "C" __declspec(dllexport), __declspec(dllexport) void Print(int a, int b) 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 라이브러리 다이나믹 링크 라이브러리(DLL) : 실행시간에 결정 스테틱 링크 라이브러리(LIB) : 빌드 A.c B.c (텍스트 레벨) 컴파일 작업 : A.obj , B.obj (바이너리 레벨) 링크 작업 EXE 생성. (.lib 가 포함) -> 동일한 라이브러리를 포함해서 사용하는 문제가 있을 수 있다. DLL 이라는 개념을 만들어낸다. 우선은 static lib 부터 해보자. 라이브러리 : 컴파일완료된 바이너리 데이터 (함수 등의 집합이다.) 라이브러리 제공자 ..
190705-3 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 가상메모리 가상메모리 함수 사용 #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; HWND hWndMain; LPCTSTR lpszClass=TEXT("BigMemory"); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { 기본 코드 생략 } #define MEGA 1048576 PBYTE stptr=NULL; TCHAR Status[256]="할당되지 않았습니다"; void FreeRecords() { ..
190705-2 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. https://v0nsch3lling.tistory.com/426 new 는 기본적으로 동기화가 되어있다. 전용 힙의 장점 한꺼번에 할당하고 제거할 수 있다. 동기화가 필요없다. (내 쓰레드 에서만 사용한다. 속도가 빠르다.) #include #include using namespace std; template class List { private: struct Node { T data; Node*next; Node*prev; public: Node(T d):data(d),prev(0),next(0){} }; private: HANDLE hHeap; // 힙의 핸들 bool bDefaultHeap; // 기본힙 or 사용자힙..
190705-1 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 메일슬롯예제를 했습니다. WriteFilre, ReadFile() 등을 IO함수라고 한다. 일반적으로 IO함수의 동작을 설명한다. OS에는 일반적으로 버퍼가 있다. 또 다른 OS의 또 다른 APP이 있을 때. IO함수는 모두 동일하게 동작한다. IO함수의 일은 바로 이렇다. APP 버퍼에 쓰는 동작이다. OS레벨에서 만들어 놓은 Write Buffer에 쓰게됩니다. 즉 APP레벨의 버퍼에서 OS레벨의 버퍼에 데이터를 나르는 작업을 말합니다. 여기서 버퍼란 임시적으로 사용되는 메모리이며 속도 향상을 위해 사용되는 것은 캐쉬라고 합니다. 일반적인 조회 작업에서 특정 데이터를 많이 조회할 경우에 카운팅을 하여 캐쉬라는 변수에 저장..
190704-3 파이프 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. IPC - 파이프 단방향 파이프 양방향 파이프 이름있는 파이프 : 이름으로 언제든지 커널오브젝트 핸들을 얻을 수 있다. 이름없는 파이프 지금 실습은 양방향, 이름있는 파이프 Client : 요청 Server : 응답 우리 예제는 이름있는 양방향 파이프 이면서 서버와 클라이언트 개념이 존재한다. (멀티 파이프) 파이프 서버가 mp라고 알려주면 클라이언트가 파이프를 만들어 달라고 요청한다. -> 파이프가 만들어지고 파이프의 한쪽을 핸들로 클라이언트가 갖는다. 서버쪽도 파이프의 한쪽의 핸들은 서버가 갖는다. 라고 생각하자. -> 클라이언트에서 먼저 발송 -> 서버가 받는다. -> 다시 클라이언트에 전송 다시. 클라이언트2번..
190704-2 CHECKER3.C -- Mouse Hit-Test Demo Program No. 3 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. A /*------------------------------------------------- CHECKER3.C -- Mouse Hit-Test Demo Program No. 3 (c) Charles Petzold, 1998 -------------------------------------------------*/ #include #pragma warning ( disable:4312) #define DIVISIONS 3 #define WM_DRAWXMSG WM_APP+100 typedef struct _Data { POINT pt; ..
190704-1 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 30. IPC(메시지) Inter process communication 프로세스 간에 통신을 해봅시다. 1 - 메세지를 사용한 교환방식 윈도우즈os 만의 RPC라는 개념이 만들어져서 사용했다. 유저 오브젝트 : Window 같은 것들. 핸들이 전역적으로 사용가능하다. 프로세스는 독립적인 가상 공간을 가진다. 32bit애플리케이션이라면 주소가 00000000~FFFFFFFF 까지 가진다.프로세스는 모두 가상주소공간이라는 주소를 사용한다. 내부적으로는 os만 안다. (64비트면 F가 16개다.) 윈도우의 핸들을 알면 메세지를 보낼 수 있다. 큰 데이터를 보내려고 가상주소를 다른 프로세스에 날리면 다른 프로세스에는 해당 데이터가..
190703-3 플래그 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 플래그 #include #include #include using namespace std; struct ThreadInfo { HANDLE hThread; bool bRun; HWND hwnd; POINT pt; // 클릭한 좌표 }; vector threadList; // 공유변수 #pragma region MyRegion DWORD __stdcall DrawThread(LPVOID pParam); LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); HINSTANCE g_hInst; int WINAPI WinMain(HINSTA..
190703-2 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 동기화 : 비동기화 : 시간 t에 독립적으로 두개 이상 작업이 수행 (중첩, 겹침) 크리티컬 색션 : 동기화 객체라고 부른다. 동기화 객체 InterLocked~ Critical Section : User Level Mutex : Kernel Level Semaphore : Kernel Level : ↑ 데이터 보호를 위해 만들어졌다. Event : Kernel Level : 순서제어를 위해 만들어 졌다. 유저모드 동기화 크리티컬 섹션 : 메모리 접근 동기화 인터락 함수 : 메모리 접근 동기화 커널모드 동기화 뮤텍스 : 메모리 접근 동기화 (소유개념), 소유하면 비신호, 소유하고있지않으면 신호 상태가된다. 세마포어 : 메모리..
190703-1 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. WS_CHILD : 부모 내에서만 동작 WS_OVERLAPPEDWINDOW : 겹쳐지는 윈도우 hwndChild = CreateWindow(_T("ChildWindow"), _T("Child Window !!"), WS_OVERLAPPEDWINDOW|WS_CHILD, 100, 100, 300, 300, hwndParent, (HMENU)NULL, //저번 코드 수정 NULL로 주어야 한다. g_hInst, NULL ); __declspec(thread) static int count = 0; #include #include DWORD __stdcall DrawThread(LPVOID pParam); DWORD __stdcal..