Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using the Poco C++ Library, how can I pass data to a thread?

So my question actually has several parts:

Using the Poco Threading Library:

  1. What are all of the possible methods for passing data to threads (at both thread invocation and for an already running thread).
  2. Which methods are preferred by you and why? Can you provide any additional information about your experience using these methods?
  3. Which methods are recommended by Applied Informatics (the author of Poco)? Is there any additional documentation supplied by Applied Informatics that outlines passing arguments to threads?

I've looked here already:

  • http://pocoproject.org/docs/package-Foundation.Threading-index.html
  • http://pocoproject.org/slides/130-Threads.pdf

Thanks in advance...

like image 432
Homer6 Avatar asked Jul 25 '12 22:07

Homer6


1 Answers

The canonical way of passing arguments to a new thread is via the Runnable subclass you'll need to create as thread entry point. Example:

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();

For passing data to an already running thread, what's the best solution depends on your requirements. For a typical worker thread scenario, consider using Poco::NotificationQueue. A complete sample with explanations can be found here: http://pocoproject.org/slides/090-NotificationsEvents.pdf

like image 55
Günter Obiltschnig Avatar answered Oct 24 '22 04:10

Günter Obiltschnig