функция в стиле с++ 11 и выше :-(
От: emergenter Россия  
Дата: 31.08.18 14:01
Оценка:
Подскажите пожалуйста сишнику 90х как понимать такую запись:

#include <boost/thread.hpp>


void function()
{
    myObj server;

...


    thread server_thread( [&server]() 
    {
        server.start();
    });

...


}

и как это в нормальный вид переписать?
Re: функция в стиле с++ 11 и выше :-(
От: Maniacal Россия  
Дата: 31.08.18 14:13
Оценка:
Здравствуйте, emergenter, Вы писали:

Это лямбда-функция была, можно избавиться

#include <thread>

void ThreadFunc(myObj& server)
{
    server.start();
}

void function()
{
    myObj server;
...
    std::thread server_thread = std::thread( ThreadFunc, server );
...
}

Так? Или нужно совсем бес C++11?
Re: функция в стиле с++ 11 и выше :-(
От: Stanislav V. Zudin Россия  
Дата: 31.08.18 14:14
Оценка:
Здравствуйте, emergenter, Вы писали:


E>Подскажите пожалуйста сишнику 90х как понимать такую запись:

E>

E>#include <boost/thread.hpp>

E>void function()
E>{
E>    myObj server;

E>...

E>    thread server_thread( [&server]() 
E>    {
E>        server.start();
E>    });

E>...


E>}

E>и как это в нормальный вид переписать?
E>


В С++'03 это выглядело бы как-то так:
void function()
{
    myObj server;

    // ----------------------------------
    class Fufel
    {
    public:
        Fufel(myObj& m) : m_srv(m) {}
        void operator()()
        {
            m_srv.start();
        }
    private:
        myObj& m_srv;
    }
    
    // ----------------------------------
...
    thread server_thread( Fufel(server) );
...
}


А в Си с классами:
static myObj* pUniqueFufelServer = NULL;
static void thread_func()
{
    pUniqueFufelServer->start();
}

void function()
{
    myObj server;
...
    pUniqueFufelServer = &server;
    thread server_thread( thread_func );
...
}

Только не приведи аллах вызывать такую функцию из нескольких потоков.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: функция в стиле с++ 11 и выше :-(
От: andyp  
Дата: 31.08.18 14:29
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Только не приведи аллах вызывать такую функцию из нескольких потоков.


Да оригинальный код тоже не фонтан. Сервер по ссылке захватывается. Надеюсь, join в той же функции.
Re[2]: функция в стиле с++ 11 и выше :-(
От: McQwerty Россия  
Дата: 31.08.18 14:57
Оценка: -1
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А в Си с классами:

SVZ>
SVZ>static myObj* pUniqueFufelServer = NULL;
SVZ>static void thread_func()
SVZ>{
SVZ>    pUniqueFufelServer->start();
SVZ>}

SVZ>void function()
SVZ>{
SVZ>    myObj server;
SVZ>...
SVZ>    pUniqueFufelServer = &server;
SVZ>    thread server_thread( thread_func );
SVZ>...
SVZ>}
SVZ>

SVZ>Только не приведи аллах вызывать такую функцию из нескольких потоков.

Ничего страшного, если использование static заменить на любой вариант TLS (например "__declspec (thread)", "pthread_getspecific", "thread_local").
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.