2010-08-18 2 views
2

스레드 중 하나에 메시지 펌프가있는 다중 스레드 Windows 응용 프로그램이 있습니다. 그 스레드에게 정보를 전달하는 메시지를 보내야합니다. 그러나 작업자 스레드에서 사용하려는 라이브러리 중 하나에는 std :: string이 필요합니다.STL 데이터 구조를 Win32 메시지 루프에 전달할 수 있습니까?

typedef struct tagCOMMAND 
{ 
    std::map<std::string, std::string> locator; 
    std::string body; 
} COMMAND, *LPCOMMAND; 

는 다음과 같이 메시지에 구조체를 전달합니다 :

LPCOMMAND cmd; 
cmd->body = "Hello"; 
cmd->locator["Hello"] = "World"; 
PostThreadMessage(dwThread, MY_CUSTOM_MESSAGE, NULL, (LPARAM)cmd); 

을이 괜찮 경우, 메모리, 호출 스레드 또는 작업자를 자유롭게에 대한 책임이 나는 다음과 같은 일을 할 수 실?

N.B. Windows 메시지 루프를 사용하는 것이 가장 쉽고 좋은 방법이라는 인상하에 진행 중이지만 더 적절하다면 Boost 라이브러리와 같은 것을 사용하는 것에 반대하지 않습니다. 그러나 이것은 Windows 관련 응용 프로그램이며 Windows에서만 실행되므로 크로스 플랫폼 호환성은 내가 지나치게 우려하고있는 것이 아닙니다.

답변

2

수신자가 하나 이상 (더 이상없고 적음)이면 오브젝트에 대한 포인터를 비동기 메시지 매개 변수로 전달하는 것이 좋습니다.

메모리를 확보하려면 수신자가 책임 져야합니다. 발신자가 안전하게 할 수있을 때 표시가 없으므로.

+0

또 다른 옵션으로, 이러한 메시지를 자주 사용하는 경우 객체 풀을 유지 한 다음 해제하면 풀로 돌아갑니다. – Ismael

관련 문제