Library: Foundation
Package: Threading
Header: Poco/ActiveMethod.h
Description
An active method is a method that, when called, executes in its own thread. ActiveMethod's take exactly one argument and can return a value. To pass more than one argument to the method, use a struct. The following example shows how to add an ActiveMethod to a class:
class ActiveObject
{
public:
ActiveObject():
exampleActiveMethod(this, &ActiveObject::exampleActiveMethodImpl)
{
}
ActiveMethod<std::string, std::string, ActiveObject> exampleActiveMethod;
protected:
std::string exampleActiveMethodImpl(const std::string& arg)
{
...
}
};
And following is an example that shows how to invoke an ActiveMethod.
ActiveObject myActiveObject;
ActiveResult<std::string> result = myActiveObject.exampleActiveMethod("foo");
...
result.wait();
std::cout << result.data() << std::endl;
The way an ActiveMethod is started can be changed by passing a StarterType template argument with a corresponding class. The default ActiveStarter starts the method in its own thread, obtained from a thread pool.
For an alternative implementation of StarterType, see ActiveDispatcher.
For methods that do not require an argument or a return value, the Void class can be used.
Member Summary
Member Functions: operator (), operator =, swap
Types
ActiveResultType
typedef ActiveResult < ResultType > ActiveResultType;
ActiveRunnableType
typedef ActiveRunnable < ResultType, ArgType, OwnerType > ActiveRunnableType;
ResultType
typedef ResultType (OwnerType::* Callback)(const ArgType &);
Constructors
ActiveMethod
ActiveMethod(
const ActiveMethod & other
);
ActiveMethod
ActiveMethod(
OwnerType * pOwner,
Callback method
);
Creates an ActiveMethod object.
Member Functions
operator ()
ActiveResultType operator () (
const ArgType & arg
);
Invokes the ActiveMethod.
operator =
ActiveMethod & operator = (
const ActiveMethod & other
);
swap
void swap(
ActiveMethod & other
);