2014-03-31 4 views
0

나는 라즈베리 파이 카메라 모듈 인터페이스를 다루고 있으며, mmal 버퍼에 등록하는 콜백 함수를 포함하고 있으며, 프레임이 잡힐 때마다 실행된다.C 콜백 기능을 동시에 실행할 수 있습니까?

이전에 실행중인 콜백 함수가 제때에 완료되지 않은 경우 다른 프레임이 도착하는 경우 혼란이 있습니다.

어떤 이벤트가 발생했을 때 실행되는 콜백 함수가 있다고 가정 해 봅시다. 해당 이벤트의 이전 이벤트에서 호출 된 콜백 함수가 아직 작업을 완료하지 않은 경우 다음 이벤트가 도착하면 어떻게됩니까? 동일한 콜백 함수가 이전 스레드가 실행 중일 때 다른 스레드와 마찬가지로 실행을 시작할 수 있습니까? 나는 그럴 것이라고 생각하지만 나는 이해할 것을 요구해야만했다.

+0

어떤 시스템/API/프레임 워크는 콜백을하고 있나요? 콜백을 만드는 것이 무엇이든간에 콜백이 병렬로 이루어질 수 있는지 없는지를 결정합니다. –

답변

0

다른 방법으로 구현 될 수 있습니다.
프레임이 버퍼에 저장되고 함수가 차례로 호출되는 경우 일 수 있습니다. 이것은 바운드 된 버퍼 생성자 - 소비자와 다소 비슷합니다. 어쩌면 콜백 함수는이 경우 버퍼가 오버플로하지 않도록 보장하는 실시간 함수입니다 (실시간 함수입니다).
또는 함수가 각 프레임에 대해 별도의 스레드에서 생성됩니다. 별도의 스레드에서 함수를 동시에 호출하는 경우 콜백 함수는 스레드로부터 안전해야합니다.
http://en.wikipedia.org/wiki/Thread-safety

0

콜백을 호출하는 소프트웨어의 구현에 따라 다릅니다.

가장 가능성있는 것은 프레임을 수신 할 때마다 스레드를 시작하지 않고 다음 프레임을 기다리기 전에 콜백 반환을 기다리는 것입니다.

당신은 너무 작동하고 당신이 필요로하는 경우 콜백 스레드 안전 코드를하는 방법을 이해하기 위해 mmal 버퍼 documenattion (및/또는 codeà로 본다.

관련 문제