Допустим, у меня есть следующий код:
typedef std::function<void ()> func_type;
void some_func()
{
// Irrelevant stuff here. Might take some time...
}
DWORD WINAPI thread_proc(LPVOID lpParameter)
{
func_type& func = *static_cast<func_type*>(lpParameter);
func();
return 0;
}
int main()
{
HANDLE handle;
{
std::function<void ()> my_func(some_func);
handle = ::CreateThread(NULL, 0, &thread_proc, &my_func, 0, NULL);
// Here we consider my_func won't be destroyed before its operator() is called in the other thread.
// I know nothing guarantees that, but let's just say it does for this sample.
}
::WaitForSingleObject(handle, INFINITE);
return EXIT_SUCCESS;
}
Кажется, моя текущая реализация работает, но это не доказывает, что я не сталкиваюсь с неопределенным поведением.
Здесь my_func может быть уничтожено до того, как вызов к его operator()
вернется.Но так как я не обращаюсь к my_func
где-либо в some_func()
, действительно ли это проблема?
Примечание: я не могу использовать std::thread
или boost::thread
, к сожалению.Я бы хотел.