2012-12-04 1 views
0

안녕하세요 저는 Winapi의 QueueUserAPC를 사용하여 다른 스레드에서 apc 함수 호출을 호출합니다. 내 질문에, 매개 변수를 전달하는 가장 좋은 방법은 무엇입니까. 개체 수명 및 할당/할당 해제 책임을 참조하십시오.winapi apc 함수 매개 변수 전달 - 가장 좋은 방법은 무엇입니까

DWORD WINAPI QueueUserAPC (PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);

나는 일부 데이터에 대한 포인터를 전달하는 매개 변수를 전달하기 위해 dwData를 사용하고 있는데 어떻게 처리해야하는지 궁금합니다. 수신 스레드가 그것을 사용하여 끝날 때까지 살아 있는지 확인해야합니다. 더 이상 사용하지 않을 때 데이터가 할당 해제되도록 스마트 포인터를 사용해야합니까?

나는 호출 스레드와 dealloc에 ​​할당 된 것 같습니다. 받아들이는 것이 가능하지만 아마도 그렇게 좋은 것은 아닙니다.

그 밖의 다른 작업은 수행 할 수 있습니까? 난 두 사람 사이의 동기화를 피하기 위해 수신 스레드가 데이터와 함께 완료되었음을 알리고 싶습니다 ...

감사합니다!

답변

1

수신 스레드에서 할당 및 수신 취소는 쉽지만 누락 될 수있는 주요 단점이 있습니다. 송신 실패를 처리하더라도 수신 스레드가 종료 될 수 있습니다 APC를 실행합니다.

아마도 누수를 피할 수있는 가장 쉬운 방법은 전송 된 데이터를위한 대기열을 생성하는 것입니다. 스레드 당 대기열 일 수도 있고 스레드가 완료되면 스레드 대기열을 탐색하여 보류중인 모든 데이터를 확보 할 수 있습니다.

하지만 평소처럼 악마는 세부 사항에 있습니다 ...