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上運行,所以跨平臺兼容性不是我過分關心的問題。
另一個選擇是,如果你頻繁使用這樣的消息,就是保留一個對象池,那麼當你釋放它時,它應該返回到池中。 – Ismael 2010-08-18 14:04:48