Как передать данные в поток с помощью библиотеки Poco C ++?

Итак, мой вопрос состоит из нескольких частей:

Использование библиотеки потоков Poco:

  1. Каковы все возможные методы передачи данных в потоки (как при вызове потока, так и для уже запущенного потока).
  2. Какие методы вы предпочитаете и почему? Можете ли вы предоставить дополнительную информацию о своем опыте использования этих методов?
  3. Какие методы рекомендует Applied Informatics (автор Poco)? Есть ли дополнительная документация от Applied Informatics, в которой описывается передача аргументов потокам?

Я уже смотрел здесь:

Заранее спасибо...


person Homer6    schedule 25.07.2012    source источник


Ответы (1)


Канонический способ передачи аргументов в новый поток - через подкласс Runnable, который необходимо создать в качестве точки входа в поток. Пример:

class MyThread: public Poco::Runnable
{
public:
    MyThread(const std::string& arg1, int arg2):
        _arg1(arg1),
        _arg2(arg2)
    {
    }

    void run()
    {
        // use _arg1 and _arg2;
        //...
    }

private:
    std::string _arg1;
    int _arg2;
};

//...

MyThread myThread("foo", 42);
Poco::Thread thread;
thread.start(myThread);
thread.join();

Лучшее решение для передачи данных в уже запущенный поток зависит от ваших требований. Для типичного сценария рабочего потока рассмотрите возможность использования Poco :: NotificationQueue. Полный образец с пояснениями можно найти здесь: http://pocoproject.org/slides/090-NotificationsEvents.pdf

person Günter Obiltschnig    schedule 25.07.2012
comment
От самого мужчины. Гюнтер - основатель прикладной информатики и руководитель проекта библиотеки Poco C ++. Большое спасибо, Гюнтер, за то, что нашли время ответить на этот вопрос! - person Homer6; 26.07.2012
comment
Для людей, которые наткнулись на этот пост, я также нашел эту ссылку полезной: cs.bgu.ac.il/~spl111/PracticalSession09_-_Threads_Using_POCO - person Homer6; 26.07.2012