2010-08-18 48 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

相关问题