13 #ifndef __PROCESS_RUN_HPP__
14 #define __PROCESS_RUN_HPP__
43 promise->set((*thunk)());
47 std::shared_ptr<lambda::function<R()>> thunk;
48 std::shared_ptr<Promise<R>> promise;
57 std::shared_ptr<lambda::function<R()>> thunk(
58 new lambda::function<R()>(
70 #define TEMPLATE(Z, N, DATA) \
71 template <typename R, \
72 ENUM_PARAMS(N, typename P), \
73 ENUM_PARAMS(N, typename A)> \
75 R (*method)(ENUM_PARAMS(N, P)), \
76 ENUM_BINARY_PARAMS(N, A, a)) \
78 std::shared_ptr<lambda::function<R()>> thunk( \
79 new lambda::function<R()>( \
80 lambda::bind(method, ENUM_PARAMS(N, a)))); \
82 std::shared_ptr<Promise<R>> promise(new Promise<R>()); \
83 Future<R> future = promise->future(); \
85 terminate(spawn(new internal::ThunkProcess<R>(thunk, promise), true)); \
95 #endif // __PROCESS_RUN_HPP__
std::string generate(const std::string &prefix="")
Returns 'prefix(N)' where N represents the number of instances where the same prefix (wrt...
REPEAT_FROM_TO(1, 13, TEMPLATE, _) class AsyncExecutorProcess
Definition: async.hpp:63
Definition: process.hpp:72
#define TEMPLATE(Z, N, DATA)
Definition: run.hpp:70
void serve(Event &&event) override
Invoked when an event is serviced.
Definition: run.hpp:41
UPID spawn(ProcessBase *process, bool manage=false)
Spawn a new process.
void terminate(const UPID &pid, bool inject=true)
Sends a TerminateEvent to the given process.
virtual ~ThunkProcess()
Definition: run.hpp:38
Protocol< PromiseRequest, PromiseResponse > promise
Future< R > run(R(*method)())
Definition: run.hpp:55
Result< Process > process(pid_t pid)
Definition: freebsd.hpp:30
Try< Nothing > bind(int_fd s, const Address &address)
Definition: network.hpp:46
ThunkProcess(std::shared_ptr< lambda::function< R()>> _thunk, std::shared_ptr< Promise< R >> _promise)
Definition: run.hpp:32
Definition: process.hpp:493