У меня есть многопоточное приложение для Windows, в котором в одном из потоков есть насос сообщений. Мне нужно отправить сообщение в эту ветку, передав ему информацию. Однако одна из библиотек, которые я хочу использовать в рабочем потоке, требует std :: string. Могу ли я сделать что-то вроде следующего:
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, поэтому кросс-платформенная совместимость - это не то, что меня беспокоит.