[c++/boost::asio] Bank Server 개발일기

폭풍저그머성찡 ㅣ 2020. 4. 26. 19:08

어제 배운 내용이다.

 

this포인터를 사용하는 람다식을 작성하면 해당 람다식이 생성되는 시점의 this가 박제되어 들어간다.

 

이 문제 때문에 정상적으로 세션이 해제되지 않는 버그가 있었다.

 

우선 세션이 파기되는 조건은 인자로 주어지는 expire_time이상의 시간이 지나면 자동으로 세션 객체가 해제되도록 되어있다.

 

세션 생성자에서 타이머에 this->세션파기() 함수를 람다로 넣고 다른 쓰레드에서 시간을 세다가 해당 람다를 호출하는 방식이다. 

 

내가 생각했던 작동 방식은 해당 세션이 복사된다면, this포인터가 가리키는 객체도 함께 변해서 복사된 객체도 정상적으로 세션이 해제될 줄 알았다. 

 

하지만 세션을 복사해도 람다식에 선언했던 this의 주소는 바뀌지 않았다.

 

리스너에서 받은 정보를 바로 전달하는 것이 아니라 중간에 한번 복사해서 큐에 넣었다가 차례가 올 때 실제로 실행을 하는 방식이므로 복사를 없애기는 힘들것 같다. (방법을 찾아보긴 해야겠다.)

 

현재는 복사되어 전달된 객체의 정보를 복사하여 새로운 세션을 생성하고 정보 전달용 세션은 그대로 해제하고 있다.

'프로젝트 > bankserver' 카테고리의 다른 글

[c++/boost::asio] Bank Server 개발일기  (0) 2020.04.19
[c++/boost::asio] Bank Server 개발일기  (0) 2020.04.17
[c++/boost::asio] 개발 일기  (0) 2020.04.16
시작  (0) 2020.04.10