티스토리에서는 여러가지 플러그인을 제공하는데 그중 제가 자주쓰는 에버노트(Evernote) 노트 불러오기 플러그인이 갑자기 작동이 잘 안되는 문제가 발생했습니다. 위와 같이 티스토리의 글쓰기 에디터에서 추가메뉴 플러그인 Evernote 순서로 클릭을 해주게되면, 해당 플러그인은 사용할 수가 있습니다. 에버노트에 작성된 노트들 중에서 태그가 tistory 또는 티스토리로 되어있는 노트들의 목록이 뜨게됩니다. 이후 원하는 노트를 클릭하면 자동으로 편집기로 불러와지는 기능이라 에버노트에 작성하고 바로 글을 쓸 수 있는 아주 편리한 플러그인입니다. 그러나 저는 몇일 전부터 "데이터를 불러오는데 실패했습니다. 잠시 후 다시 시도해 주세요." 라는 메세지 오류가 뜨면서 제대로 작동이 안됩니다. 그래서 고객 센터에도..
190716-1 .h #pragma once #include class CClientDCU : public CDC { HDC m_hDCu; HWND m_hWndu; public: CClientDCU(CWnd* pWnd); ~CClientDCU(); void Ellipse(int x1, int y1, int x2, int y2)const; }; .cpp #include "pch.h" #include "CClientDCU.h" CClientDCU::CClientDCU(CWnd* pWnd) { m_hWndu = pWnd->m_hWnd; m_hDCu = ::GetDC(m_hWndu); } CClientDCU::~CClientDCU() { ::ReleaseDC(m_hWndu, m_hDCu); } void CCli..
190715 매니패스트 형식메타데이터 CIL CODE [리소스] 닷넷은 독립적인 라이브러리(.net 프레임워크)를 사용한다. MFC : Windows os 의 바이너리만 만들 수 있다. 닷넷은 CLR만 있으면 다른 운영체제에서도 가능하다. 우리는 MFC를 공부해볼 것이다. MFC는 c++을 사용해서 윈도우즈 개발을하는데 라이브러리 이름이 MFC인 것이다. IL DASM 형식 데이터(?) (ctrl+m) MFC (90년대 초) (프레임워크 프로그래밍 공부하기 좋다.) - Afx 가 앞에 붙어있는 함수들은 전역함수다. AfxGetApp() : 주소를 반환하는데 CWinApp 객체의 주소를 반환한다. FrameWork 프로그래밍 : 이미 구조가 만들어져있고 그 위에서 하는 프로그래밍. (정형화) 먼저 구조를 ..
190712-4 - IOCP 모델 비동기 입출력을 쉽게 할 수 있는 객체를 만들었다. // 입출력 완료 포트 생성 HANDLE hcp = CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, 0);//- 첫 번째 인수가 -1이면 ICOP 오브젝트를 생성 if(hcp == NULL) return -1; // 소켓과 입출력 완료 포트 연결 HANDLE hResult = CreateIoCompletionPort((HANDLE)client_sock, hcp, (DWORD)client_sock, 0); // 첫 번째 인수가 IOCP인수를 가지면 IOCP와 해당 소켓을 연결한다. //키=소켓번호 로 설정, 0 = 스레드를 전부 깨운다. if(hResult == NULL)..
190712-3 Overlapped 모델 동기 : 비동기 : 완료보고를 받고 동작을 처리해야한다. 닷넷에가면 비동기 델리게이트로 구현되어있다. // 소켓 정보 저장을 위한 구조체 struct SOCKETINFO { WSAOVERLAPPED overlapped; SOCKET sock; char buf[BUFSIZE+1]; int recvbytes; int sendbytes; WSABUF wsabuf; // 전송할 데이터의 크기와 버퍼의 주소값이 포함되는 구조체 (WSAsend함수에필요) }; // 더미(dummy) 이벤트 객체 생성 WSAEVENT hEvent = WSACreateEvent(); if(hEvent == WSA_INVALID_EVENT) err_quit("WSACreateEvent()"); ..
190712-2 WSAEventSelect // WSAEventSelect() retval = WSAEventSelect(listen_sock, EventArray[nTotalSockets-1], FD_ACCEPT|FD_CLOSE); OS에 알려준다. 임의의 소켓을 대상으로 이벤트 발생여부를 관찰하도록 한다. // 이벤트 객체 관찰 index = WSAWaitForMultipleEvents(nTotalSockets, EventArray, FALSE, WSA_INFINITE, FALSE); 단 하나라도 이벤트 발생시 리턴한다.
190712-1 WSAAsyncSelect 윈도우 에서 제공하는 모델이다. 서버를 중심으로 모델을 공부해보자. ● WSAAsyncSelect : 윈도우 메세지 기반의 모델이다. 쓰레드가 없다. 프라이머리스레드를 사용한다. 프라이머리 스레드는 UI에 대한 처리를 하자고 약속되어있다. 그래서 경고가 뜬다. -> WSAEventSelect를 사용하는 것을 권장하도록한다. 기능수행방식(?) 플레그 방식 완료보고 방식 Blocking IO select Overlapped IO 쓰레드 WSAAsyncSelect IOCP WSAEventSelect ● 차이점 기능수행방식(?) 먼저 함수를 호출해서 기능을 수행한다. (함수 반환시 완료다.) 플레그🏁 방식 OS가 알려준다.(깃발을 드는 방식) (Message, Even..
190711-2 - SELECT 모델 SELECT 모델 쓰레드 하나로 다중처리를 할 수 있다. // 소켓 정보 저장을 위한 구조체 struct SOCKETINFO { SOCKET sock; //소켓번호 char buf[BUFSIZE+1]; //버퍼 int recvbytes; //받은바이트 int sendbytes; //보낸바이트 }; 소켓 마다 독립적으로 관리하기 위해서 구조체 정의. SOCKETINFO *SocketInfoArray[FD_SETSIZE]; // 소켓정보포인터를 저장하는 배열 (FD_SETSIZE : 현재 64개) // 넌블로킹 소켓으로 전환 u_long on = TRUE; retval = ioctlsocket(listen_sock, FIONBIO, &on); if(retval == SO..
190711 - Study 비동기 IO가 사실상 Overlapped(중첩된) IO나 다름없다. IO 중첩 : 하나의 쓰레드에서 둘 이상 영역으로 데이터를 전송. 윈도우에서는 IO가 완료된 상황 확인방법에 포커스를 맞춘다. 넌-블로킹 모드로 IO를 하면 이후 완료결과를 별도로 확인하는 작업이 필요하다. SOCKET WSAAPI WSASocketA( int af, //프로토콜 체계 정보 int type, // 데이터 전송방식 int protocol, LPWSAPROTOCOL_INFOA lpProtocolInfo, GROUP g, // 예약변수 DWORD dwFlags ); ● Overlapped IO 소켓 생성 WSASocketA(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_..