음 구조적인 문제인데...
작업 Thread( task )가 있고 그 쓰레드가 갖고 있는 데이터를
GUI에서 표현해주어야 하거든
근데 데이터의 종류도 많고 많고 양도 많아...
그런데 이것들을 딜레이 없이 가져다가 GUI에 뿌리고 싶은데...
보통 동기화 오브젝트를 쓰잖아...
그런데 그렇게 하면 둘다 처리속도가 떨어질거 같아서 lock&unlock이 자주 일어나고...
그러면 GUI에서 요청이 있을때에만 쓰레드에서 가져오는 방식으로 하고 싶은데...
이것도 GUI입장에서는 약간 딜레이가 있거든...
이것마저도 없애고 싶은데...
보통 이런경우에 어떤구조로 하는게 좋을까?
----------참고로 두번째 GUI 요청이 있을때에만 처리하는 방식 ----------
==> GUI
task.add_cmd( GET_USER_TABLE, &sync_obj );
sync_obj.wait(); // 여기서 딜레이가 생긴다... 테스크의 응답을 기다려야 함
data = sync_obj.result() ;
==> TASK
loop()
{
switch( cmd )
{
case GET_USER_TABLE:
p = malloc(sizeof(...));
memcpy(p,m_p, sizeof(...));
sync_obj.set_result(p); // 여기가 테스크 응답...
break;
}
}
----------------------------------------------------------
큐
음 ... 최종 목표는 쓰레드가 가지고 있는 데이터를 GUI에서 갖다 쓰는데 딜레이가 없으면 좋겠다 인데;; 좋은 기법 없나염?
두번째 방식이 커맨드 큐 ;;;
옵저버 패턴
많은 데이터 가져다 쓰는데는 그만큼의 비용이 드는건 감안해야지만...
ㅈㅅ
아 옵저버 패턴이 이경우에 유용함? 오오 이런경우에 맞는 디쟌 패턴이 있을줄 알았어...
고민이긴하다.... 처리 데이터를 요청이 들어왔을때 복사를 해줘야 하는지, 아니면 바로 접근을 하게 하는지.. 바로 접근하면 워커스레드가 다른 작업을 몬하겠고 데이터 복사를 해주면 워커스레드 + GUI에서 데이터 복사 지연시간만 걸리고 메모리가 더 들긴 하지만... 메모리가 충분하면 후자가 더 낫지 않을라나..?