190702-4 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. worker 쓰레드 UI 쓰레드 #include #include DWORD __stdcall DrawThread(LPVOID pParam); DWORD __stdcall UIThread(LPVOID pParam); LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK ChildProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); HINSTANCE g_hInst; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevI..
190702-3 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. #include #include void Sleep() { for(int i = 0 ; i INC n -> Write n (3가지 연산이 결합이 된다.) 원자적인 연산 : 어떤 연산이 수행되는 동안 다른 연산에 의해 방해가되면 안된다. (명령 한줄두줄이 아님) ● 쓰레드 선점당할시 발생하는 문제 #include #include int val=0; DWORD __stdcall ThreadFunc(LPVOID pParam) { printf("ThreadFunc Param : %d 생성\n", GetCurrentThreadId()); for(int i = 0 ; i
190702-2 - 윈도우의 중요한 예제 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 06커널오브젝트와핸들 핸들테이블을 상속해서 상속한 핸들테이블의 핸들을 가지고 자식이 사용가능하다. child #include #include void main() { HANDLE hParentProcess; DWORD handle; printf("부모에서 생성한 이벤트의 핸들: "); scanf("%d", &handle); HANDLE hEvent = (HANDLE)handle; printf("이벤트 신호 상태 기다림...\n"); DWORD idx = WaitForSingleObject(hEvent, INFINITE); //● 신호상태 까지 INFINITE기다린다. if( idx != WAIT_OB..
190702-1 - 메모리활용 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. ● new 로 동적 배열 할당 해보기 #include #include #include using namespace std; int main() { int row = 3; int col = 4; // input int** p = new int* [row]; //int** p = (int**)malloc(sizeof(int*) * row); for (int i = 0; i
190701-2 - 핸들, 동기, 신호/비신호 (1일차) 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. #include #include #include void main() { //const char* s = "Hello!"; // 상수 메모리 문자열 ////s[0] = 'a'; // 변경할 수 업 //printf("%s\n", s); char cur[MAX_PATH]; char sys[MAX_PATH]; char win[MAX_PATH]; // 현재 작업 디렉토리 GetCurrentDirectory(MAX_PATH, cur); //● 작업 디렉토리 : 프로세스는 자기만의 작업디렉토리가 있다. //SetCurrentDirectory("C:\\Temp"); //GetCurrentDirec..
윈도우즈 시스템 프로그래밍에 관련된 내용입니다. 190701-1 - 커널오브젝트, 아스키코드와 유니코드 (1일차) 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. C/C++의 DLL등을 .Net에서 갖다가 그대로 쓸 수 있다. (유명한 C++/C 라이브러리는 C#으로 포팅 되어있다.) 다른 언어를 사용할 때 BCL을 사용해야한다. (이론적으로 모든 언어로 프로그래밍이 가능하다. 그러나 거의다 C#으로 개발함) Win32라이브러리에서 os와 밀접한 부분을 공부한다. 그 부분이 시스템 프로그래밍이다. 여기서는 프로세스와 쓰레드, 핸들 종류, 메모리, DLL(동적 링크 라이브러리), 동기화 객체, +a 등을 중요하게 공부할 것이다. 쓰레드와 동기화 부분은 다른 쪽으로 넘어가도 중요한 부분이 될..
190628(5일차) 정처기 시험준비하느라 수업을 잘 듣지 못한 날. 복사생성자 처음 초기화를 복사로 함. 복사 대입 연산자 원래 만들어진 곳에 대입 (참조면 delete 필요) 개체는 독립성을 가져야한다. 복사 생성자의 원형 String(const String& arg) { } DrawText(hdc, msg, -1, &rt, DT_CENTER|DT_VCENTER|DT_SINGLELINE); GetClientRect(hwnd, &rt) 윈도우의 생성정보를 유지하는 메모리 블록이 있다. 메모리 블록을 컨트롤 하는 것이 핸들. 사용자가 메모리 블럭을 만들어 낼 수 있다. (각 윈도우 마다 만들 수 있다.) cbClsExtra 를 사용하면 된다. 또는 cbClsExtra. WndClass.cbWndExtra..
190627(4일차) - 다이얼로그 윈도우, 자식윈도우, 컨트롤 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 다이얼로그윈도우 자식윈도우 컨트롤 응용 프로그램 메뉴 클릭시 WM_COMMAND 가 발생된다. wParam의 LOWORD에서 어떤 메뉴가 눌렸는지 알 수 있다. 프로시저(핸들러) : 메세지를 처리하는 함수 MVVM : 모델뷰 뷰모델 현윈도우 외 다른 영역에서 마우스가 떼졌을 때 좌표가 필요하다면, 마우스캡쳐가 필요하다. SetCapture(①); //DOWN메세지에서 ①: 어떤 윈도우가 캡쳐받을 건지 (hwnd 등) ReleaseCapture(); //UP메세지에서 이 때 우리가 하는 실습 네모그리기에서 화면 밖 영역에서 마우스를 놓게되면, 마이너스 값을 갖게된다. 8비트 였던..
190626(3일차) - DC받고 그리기 작업, bitmap 타이머 사용. 간격마다 반복적작업 전역변수 없애고 사용자 메세지 전송하고 프로시저에서 처리 메뉴추가 버튼클릭 비트맵 개발자에게 도구는 개발자 능력을 50%이상 향상시킨다. "Code" Add : 코드 추가 ↕ "Refactoring" : 리팩토링 (결과가 바뀌면 안된다.) 두 개를 동시에 하진 않았다. PtInRect() 숙제 : 첫번째 점에 근처에서 클릭하면 폴리건완성되게해라 WM_KEYDOWN : 그냥 키 메세지 WM_CHAR : 문자코드 메세지 (대/소문자 구분가능) WM_KEYUP : 그냥 키 메세지 키스트로크 - 숙제. 랜덤값 사용해서 8방향 중 한 방향으로 튀긴다. 타이머 쓰레드 비동기IO SendMessage() WM_APP + a..