Создание собственного потока, который возвращает параметры функции при сбое создания потока.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создание собственного потока, который возвращает параметры функции при сбое создания потока.

Сообщение Anonymous »

Я пытался реализовать создание собственного потока с помощью переменных функций потока, которые передаются обратно в источник, если создание потока завершается неудачно. Это продолжение моего вопроса «Что произойдет с параметрами потока, если создание потока завершится неудачно?».
Я попробовал это для Win32, и это код:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

using namespace std;

template
void xthread( Fn &&fn, Args &&... args )
{
using tupl_t = tuple;
auto argsSeq = make_index_sequence();
auto thr = []( index_sequence )
{
return +[]( LPVOID lpvThreadParam ) -> DWORD
{
tupl_t &tupl = *(tupl_t *)lpvThreadParam;
get( tupl )( get( tupl ) ... );
return 0;
};
};
auto fnObj = make_unique( forward( fn ), forward( args ) ... );
HANDLE hThread = CreateThread( nullptr, 0, thr( argsSeq ), fnObj.get(), 0, nullptr );
if( hThread )
fnObj.reset(),
WaitForSingleObject( hThread, INFINITE );
else
{
auto back = []( Dst &&dst, auto &&src )
{
if constexpr( is_rvalue_reference_v && !is_const_v )
dst = move( src );
};
back( forward( fn ), get( *fnObj ) );
[&]( index_sequence )
{
(back( forward( args ), get( *fnObj.get() ) ), ...);
}( argsSeq );
}
}

int main()
{
string str( "hello world" );
xthread( []( string &str ) { cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78450024/own-thread-creation-which-reverts-function-parameters-on-thread-creatrion-failur[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»