본문 바로가기

programing/C++56

코드를 잘 짰는데 이상한 값이 나오는 경우 1. pragma pack() - 의심 없이 업체API 만 믿고 작업하고 보니 값을 잘 넣어도 이상하게 떠서 확인 해보니 값을 넣을 때하고 다른 곳에서 읽을 때의 변수의 주소가 달라지는 경우가 생김 - 확인 해보니 pragma pack 설정 해놓고 다시 안돌려 놓으니까 헤더 읽는 곳마다 같은 클래스라도 다른 간격, 크기로 계산 되어 예상과는 다른 결과를 만들었다. - 프로토콜 땜 pragma pack 설정 한다음에는 항상 pragma pack()으로 원상 복구를... 2. 싱글톤 생성자에서 초기화와 쓰레드 - 예전에 클래스 생성자가 있는데 초기화 함수를 따로 왜 둘까 했었는데 - 싱글톤 객체를 초기화 하면서 쓰레드 돌리고, 다시 쓰레드에서 해당 클래스 객체를 호출 하다보니 꼬였다. - 객체 생성자를 거쳐.. 2023. 3. 24.
websocket in cpp(MSVC) 웹서버를 원래 잘 쓰던 spring이나 node.js에서는 쓰기 편하게 돼있지만 cpp는 라이브러리부터 찾아야 하는데 삽질이 심했다. libwebsockets는 cmake로 빌드해야 하는데 옵션이 좀 까다롭고 사용법도 까다롭다. (그래도 오픈소스를 쓰려면 cmake는 정ㅋ벅ㅋ을 언젠간 해야 할 것 같다.) boost는 라이브러리 쓰는데 딸려오는게 좀 많아서 최후의 수단으로 생각했음. 그리고 다른 라이브러리 중에서 boost를 이용하는게 많은 거 보면 그리 간편하게 돼있지는 않은 것 같음. 그렇게 해서 추려진게 winhttp하고 cpprestsdk cpprestsdk는 내부적으로 boost를 사용하는 것이고 winhttp는 vs에 이미 지원해 줌 WS 서버까지 봤으면 좋겠지만 시간상 클라이언트가 한계;;;.. 2019. 11. 6.
mutable 키워드 const_cast()로 상수성을 무시 할 수 있지만 (잘 안씀) 비슷하게 상수 멤버 함수에서는 일반 멤버 변수를 바꿀 수 없지만 mutable 멤버 변수는 바꿀 수 있음 2017. 7. 6.
IOCP를 쓰는데 완료 쪽으로 안넘어 올 경우 확인 해 볼것 - Overlapped 구조체 변수중 핸들이 NULL 인지 - Read나 Write함수의 파일 핸들이 유효한지 (파일이 안열렸다거나 도중에 파일이 닫혔다거나) 2017. 6. 22.