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

argument-passing, c++, multithreading, poco-libraries

Solution

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

Problem

So my question actually has several parts: Using the Poco Threading Library: - What are all of the possible methods for passing data to threads (at both thread invocation and for an already running thread). - Which methods are preferred by you and why? Can you provide any additional information about your experience using these methods? - 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...

Original source