Могу ли я передать структуры данных STL в цикл сообщений Win32? - PullRequest
2 голосов
/ 18 августа 2010

У меня есть многопоточное приложение для 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, поэтому кросс-платформенная совместимость - это не то, что меня беспокоит.

1 Ответ

2 голосов
/ 18 августа 2010

Это нормально и нормально передавать указатель на объекты в качестве параметров асинхронного сообщения, пока существует один получатель (не больше и не меньше).

Ответственность за освобождение должна быть у получателя.память, так как вызывающий не имеет указаний, когда это безопасно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...