У меня возникла идея сэкономить время, связанное с созданием временной функции для использования в качестве аргумента функции, которая в ней нуждается. Причина, по которой я следую этому поведению, - это сделать что-то в новом потоке простым способом (используя Win32 API) без необходимости определять все виды функций, которые я буду использовать.Определение функции внутри функции вызов
Вот пример:
void msg (const string & message) {
MessageBox (0, message.c_str(), "Message", 0);
}
Это даст окно сообщения, но ваша программа останавливается, пока она не закроется. Решение состоит в том, чтобы создать поток для окна сообщений, который запускается одновременно с основным потоком.
void msg (const string & message) {
CreateThread (0, 0,
(LPTHREAD_START_ROUTINE)({MessageBox (0, message.c_str(), "Message", 0);}),
0, 0, 0);
}
В этом случае LPTHREAD_START_ROUTINE
определяется как
typedef DWORD (*LPTHREAD_START_ROUTINE)(LPVOID param);
Поскольку у меня есть несколько функций, желающих другой поток для целей, как, что, помещая функцию в вызове CreateThread
, кажется, работает хорошо.
Но скажу, что я хотел использовать это LPVOID param
. Я хотел бы знать, насколько стандарт этот метод, и где я могу узнать, как использовать его для более сложных методов. Кроме того, я знаю, что я использую его в функции, которая будет хранить его для последующего использования (например, функция цикла сообщений, где вы можете добавлять сообщения для обработки и соответствующую функцию для вызова) - это плохая идея, поскольку функция является временной и не будет который может быть вызван при необходимости. Существует ли какая-либо польза от таких вещей, как потоки, где раздражает, чтобы одна линия функционировала в другом месте, чтобы ее использовать?
Вопрос не совсем понятно (а также, что синтаксис не является стандартным) –
я просто была идея сегодня : схема сохранения времени и пространства в файле. Я в основном интересовался, насколько безопасно это использовать, и если его можно использовать для лучших вещей, чем этот пример. – chris