함수 하나 실행시키고 그 동안 다른 함수도 실행시키고 싶으면
뭐 공부해야 합니까?
예를 들어 지금 카메라를 통한 영상 취득을 공부하고 있는데,
카메라 제조사 라이브러리에 있는 GetImage()라는 함수를 계속 반복해서 실행하여 동영상을 받는 StartLive()라는 함수를 만들어서 실행중이라고 치고, 그게 실행중일 때 다른 함수를 실행시키고 싶습니다..
이를테면 한 프레임마다 히스토그램을 만들어 화면에 쏘는 함수라던지, 스탑버튼을 ui에 만들어서 눌렀을때 라이브를 중지한다던지 하는..
그런데 Start버튼을 눌러서 함수를 실행하면 그게 끝날때까지 Stop버튼이 비활성화되서 눌러지지가 않아요..
ui는 MFC로 구성했습니다 조언좀 해주십쇼..
해결방안까진 바라지 않습니다 어떤기능이 있으니 이걸 공부해서 구현해봐라 라는 조언만이라도 부탁드립니다
- dc official App
병렬 프로그래밍
ㄴㄴ 그냥 thread 찾자
회사 선배가 주신 샘플 프로그램에 WinThread를 상속받아 만든 CThread라는 클래스가 있던데 그것 사용을 말하시는 건지요? - dc App
winThread는 뭐지... 그것도 님 선배가 정의한거 아님? 아무튼 thread라는 표준 라이브러리 있음. 네이버에만 가도 설명 많음
검색해보니 MFC 제공 기능인 것 같습니다 - dc App
겸사겸사 mutex도 찾자
뭐 검색해보면 나올걸
멀티 스레드다 병렬 프로그래밍이다 딱 뭐가 필요한지 알면 검색해서 공부하는데 뭐가 필요한지 몰랐습니다.. - dc App
c++ mfc 너가 하고싶은거 대충영어문장으로 치면나옴
큰 작업을 사용자 인터페이스랑 별도 스레드 분리하고, 중단가능 처리하려면 , 큰 작업을 잘게 쪼개서 중간중간 중단해야하는지 확인하는 방법있음. 사용하기 깔끔해도 무지 귀찮고 앞으로 작업할때 신경쓰는거 늘어날듯
쓰레드 자체를 중지시킬 수는 없고 해당 작업 사이사이에 if문으로 스탑버튼이 눌렸는지 확인해야 한다는 말씀이신가요? - dc App
ㅇㅇ 그냥 플래그 확인하면 되니까 lock 말고 volatile BOOL 정도면 될듯 합니다 플래그 변수 멤버변수로 존재하면 그 주소가 4바이트에 정렬되도록 하고
넵 자세한 답변 정말 감사드립니다 - dc App
스레드를 펑 시키는건 비추
스레드 + 잠김 + 뮤텍스 ㄱㄱ
스레드 안 쓰고 하려면 마찬가지로 작업을 여러 단계로 나눠 매 프레임마다 호출하는 방법도.. 시간 오래 걸리는 그래프 탐색같은걸 쪼개려면 골 아플듯
그것은 제가 해봤는데 히스토그램 그리는 함수가 생각보다 시간을 잡아먹어 매프레임마다 진행하기엔 무리가 있었습니다! 프레임 간격이 길어져 영상이 버벅였습니다! - dc App
그걸 그리는 작업을 여러 프레임에 나눠 작업하면 된다는 말입니당
아 한프레임마다 새로 그려야 하면 빨라지게 해야졍 ㅎㅎ
아 혹시 질문하나 드려도 될지 모르겠는데 MFC에서 메시지 처리기는 별도의 스레드로 동작하나요? 영상 출력버튼에 타이머 설정하고 OnTimer 메시지 처리 함수에 프레임 취득 기능을 넣었을 때엔 다른 기능이 동작했던 기억이 있습니다 - dc App
mfc 도 그냥 쌩짜 winapi getmsg peekmsg 로 run 함수 멘드는 거 처럼 run 함수 있습니다 한번 찾아보세유
단일 스레드였던걸로 기억함다
내생각에는 일정주기 마다 새로 보여줄거 같은데 내가 말하는 프레임은 run에서 루프 한바퀴를 말합니당 거기서 작은 단위로 쪼개 조금씩 처리하면 다른 메세지도 블로킹되지않고 처리가능합니다
넵 찾아볼게용 감사합니다 - dc App
해당 댓글은 삭제되었습니다.
있을거라 생각되지만 제가 쓸줄 모르는 것 같습니다 ㅎㅎ;; - dc App
그냥 std::thread 쓰면 되는데 뭘 토나오게 MFC를 쓰고 앉아있냐 - return 0;