2010-08-18 106 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 2010-08-18 14:04:48

相關問題