I have a multithreaded Windows application where one of the threads has a message pump in it. I need to send a message to that thread, passing information to it. However, one of the libraries I want to use in the worker thread requires std::string. Can I do something like the following:
typedef struct tagCOMMAND
{
std::map<std::string, std::string> locator;
std::string body;
} COMMAND, *LPCOMMAND;
Then pass the struct to the message like so:
LPCOMMAND cmd;
cmd->body = "Hello";
cmd->locator["Hello"] = "World";
PostThreadMessage(dwThread, MY_CUSTOM_MESSAGE, NULL, (LPARAM)cmd);
If this is okay, who's responsible for freeing the memory, the calling thread or the worker thread?
N.B. I'm proceeding under the impression that using a Windows message loop is the easiest and best approach here, but I'm not opposed to using something like a Boost library if that's more appropriate. However, this is an application that is Windows-specific, and will only ever run on Windows, so cross-platform compatibility isn't something I'm overly concerned with.