반응형
CEF(Chrominum Embedded Framework)
bitbucket.org/chromiumembedded/cef/src/master/
REST API
- 리소스 상태에 대한 표현을 요청자에게 전송함, 주로 HTTP: JSON, HTML, XLT, 일반 텍스트
- 클라이언트, 서버 및 리소스 구성, 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처
- stateless 커뮤니케이션: 요청할 때 클라이언트 정보가 저장되지 않고, 각 요청이 분리(연결되어 있지 않음)
- 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터
https://meetup.toast.com/posts/92
https://www.redhat.com/ko/topics/api/what-is-a-rest-api
std::promise, std::future
- 어떤 쓰레드 T를 사용해서 비동기적으로 값을 받아내겠다, 미래(future)에 쓰레드 T가 원하는 데이터를 돌려주겠다고 약속(promise)하겠다
- producer-consumer pattern
QEventLoop
- 이벤트 루프(Event loop): 루프를 돌면서 이벤트를 처리함, 사용자가 발생시키거나 위젯에서 발생시킨 이벤트들이 순서대로 Event Queue에 입력됨, 메인 이벤트 루프는 Event Queue로부터 순차적으로 이벤트를 가져간 후 해당 이벤트를 처리할 메소드를 호출하여 이벤트를 처리함
- Queue이기 때문에 순차적으로 처리됨
- 로그인이 완료될 때까지 다른 코드가 수행되지 않고 기다려야 하는 경우
- QEventLoop를 만들고 exec()를 호출하면 이벤트 루프가 시작됨, 이벤트 루프 내에서 나가고 싶을 때 exit()를 호출
- signal과 slot 이용하면 좋은 듯함!
- GUI 쓰레드 말고 다른 쓰레드에서 얼럿의 정보를 가져와야 했음
- Qt의 UI 컨트롤은 GUI 쓰레드에서만 할 수 있기 때문에 signal과 slot을 이용하여 정보를 가져왔음
- 이미 충분히 큰 사이즈의 클래스이다 보니까 새로운 변수를 정의하는 건 좀 아닌 것 같았고 기존에 있던 flag 이용해서 while문을 돌다 보니까 쓰레드 간의 정보 갱신 텀이 있는 것을 발견함
- 따라서 Sleep을 걸어서 조금 딜레이를 줬음
=> 이를 QEventLoop를 이용하면 좀 더 짧고 간편하게 처리할 수 있었음!
QNetworkAccessManager 관련 이슈
- QNetworkAccessManager는 비동기 방식으로 작동함 (QEventLoop(), exec() 사용)
- QApplication은 singleton
- UI를 사용하지 않으려면 QCoreApplication 사용하기
- QNetworkAccessManager::finished가 와야 하는데 안 옴
=> NetworkAccessManager의 get에서 에러 발생
[QEventLoop: Cannot be used without QApplication] - 서치해 보니 해당 에러는 main 함수에서 QApplication을 추가하지 않아서 그런 것 같음
=> 근데 main.cpp에서 이미 exec() 하고 있음 ㅠㅠ 그래서 뭐가 문제인지 잘 모르겠다 - 일단 setParent가 불가능했음
=> networkManager.setParent(this)에서 에러 발생
[QObject::setParent: Cannot set parent, new parent is in a different thread]
되게 이상한 게... 실제 사용해야 하는 프로젝트에서는 작동할 때는 아무런 문제가 없지만
테스트용으로 만든 프로젝트에서는 다른 쓰레드에서 돌고 있다... 이게 뭐지 🙄
취업이니 뭐니 엄청 바빴다가 막상 취업하니까 또 회사 적응이니 뭐니 하루하루 너무 바쁘게 살고 있어서 블로그를 방치해 놓을 수밖에 없었다...
이제 회사 적응도 했으니까! 다시 개인 공부도 천천히 시작하려고 한다!
멈추지 않는 개발자가 될 것이다! 파이팅 😎
반응형