profile image

L o a d i n g . . .

article thumbnail image
Published 2020. 12. 4. 23:47
반응형

CEF(Chrominum Embedded Framework)

bitbucket.org/chromiumembedded/cef/src/master/

 

Bitbucket

 

bitbucket.org

 

REST API

  • 리소스 상태에 대한 표현을 요청자에게 전송함, 주로 HTTP: JSON, HTML, XLT, 일반 텍스트
  • 클라이언트, 서버 및 리소스 구성, 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처
  • stateless 커뮤니케이션: 요청할 때 클라이언트 정보가 저장되지 않고, 각 요청이 분리(연결되어 있지 않음)
  • 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터

https://meetup.toast.com/posts/92

 

REST API 제대로 알고 사용하기 : TOAST Meetup

REST API 제대로 알고 사용하기

meetup.toast.com

https://www.redhat.com/ko/topics/api/what-is-a-rest-api

 

REST API(RESTful API, 레스트풀 API)란 - 서버, 구현, 사용법

REST API(RESTful API)란 REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 뜻합니다. api 서버, rest api 구현 및 사용법을 설명합니다.

www.redhat.com

 

std::promise, std::future

  • 어떤 쓰레드 T를 사용해서 비동기적으로 값을 받아내겠다, 미래(future)에 쓰레드 T가 원하는 데이터를 돌려주겠다고 약속(promise)하겠다
  • producer-consumer pattern

 

QEventLoop

  • 이벤트 루프(Event loop): 루프를 돌면서 이벤트를 처리함, 사용자가 발생시키거나 위젯에서 발생시킨 이벤트들이 순서대로 Event Queue에 입력됨, 메인 이벤트 루프는 Event Queue로부터 순차적으로 이벤트를 가져간 후 해당 이벤트를 처리할 메소드를 호출하여 이벤트를 처리함
  • Queue이기 때문에 순차적으로 처리됨
  • 로그인이 완료될 때까지 다른 코드가 수행되지 않고 기다려야 하는 경우
  • QEventLoop를 만들고 exec()를 호출하면 이벤트 루프가 시작됨, 이벤트 루프 내에서 나가고 싶을 때 exit()를 호출
  • signal과 slot 이용하면 좋은 듯함!

 

  1. GUI 쓰레드 말고 다른 쓰레드에서 얼럿의 정보를 가져와야 했음
  2. Qt의 UI 컨트롤은 GUI 쓰레드에서만 할 수 있기 때문에 signal과 slot을 이용하여 정보를 가져왔음
  3. 이미 충분히 큰 사이즈의 클래스이다 보니까 새로운 변수를 정의하는 건 좀 아닌 것 같았고 기존에 있던 flag 이용해서 while문을 돌다 보니까 쓰레드 간의 정보 갱신 텀이 있는 것을 발견함
  4. 따라서 Sleep을 걸어서 조금 딜레이를 줬음

=> 이를 QEventLoop를 이용하면 좀 더 짧고 간편하게 처리할 수 있었음!

 

QNetworkAccessManager 관련 이슈

  • QNetworkAccessManager는 비동기 방식으로 작동함 (QEventLoop(), exec() 사용)
  • QApplication은 singleton
  • UI를 사용하지 않으려면 QCoreApplication 사용하기

 

  1. QNetworkAccessManager::finished가 와야 하는데 안 옴
    => NetworkAccessManager의 get에서 에러 발생
    [QEventLoop: Cannot be used without QApplication]
  2. 서치해 보니 해당 에러는 main 함수에서 QApplication을 추가하지 않아서 그런 것 같음
    => 근데 main.cpp에서 이미 exec() 하고 있음 ㅠㅠ 그래서 뭐가 문제인지 잘 모르겠다
  3. 일단 setParent가 불가능했음
    => networkManager.setParent(this)에서 에러 발생
    [QObject::setParent: Cannot set parent, new parent is in a different thread]

 

되게 이상한 게... 실제 사용해야 하는 프로젝트에서는 작동할 때는 아무런 문제가 없지만

테스트용으로 만든 프로젝트에서는 다른 쓰레드에서 돌고 있다... 이게 뭐지 🙄

 

 

취업이니 뭐니 엄청 바빴다가 막상 취업하니까 또 회사 적응이니 뭐니 하루하루 너무 바쁘게 살고 있어서 블로그를 방치해 놓을 수밖에 없었다...

이제 회사 적응도 했으니까! 다시 개인 공부도 천천히 시작하려고 한다!

멈추지 않는 개발자가 될 것이다! 파이팅 😎

반응형
복사했습니다!