Да вот просто так, под влиянием ожесточенных обсуждений :)
Слева Theron, справа SObjectizer. Все комментарии удалены дабы не отвлекать внимание. Если кому-то нужны пояснения, то вот сюда (по сравнению с LOR-овским вариантом из SO-примера удалена секция try-catch, т.к. в Theron-варианте ее тоже нет).
#include <Theron/Theron.h> class Printer : public Theron::Actor { public: Printer(Theron::Framework &framework) : Theron::Actor(framework) { RegisterHandler(this, &Printer::Print); } private: void Print(const std::string &message, const Theron::Address from) { printf("%s\n", message.c_str()); Send(0, from); } }; int main() { Theron::Framework framework; Printer printer(framework); Theron::Receiver receiver; if (!framework.Send( std::string("Hello world!"), receiver.GetAddress(), printer.GetAddress())) { printf("ERROR: Failed to send message\n"); } receiver.Wait(); } |
#include <iostream> #include <so_5/all.hpp> struct message : public so_5::rt::message_t { std::string msg; message( std::string m ) : msg( std::move(m) ) {} }; class printer : public so_5::rt::agent_t { public : printer( so_5::rt::environment_t & env ) : so_5::rt::agent_t( env ) { so_subscribe_self().event( &printer::print ); } private : void print( const message & evt ) { std::cout << evt.msg << std::endl; } }; int main() { so_5::launch( []( so_5::rt::environment_t & env ) { auto agent = new printer( env ); env.register_agent_as_coop( "hello", agent ); agent->so_direct_mbox()->run_one().wait_forever() .make_sync_get< message >( "Hello, World" ); env.stop(); } ); } |
Комментариев нет:
Отправить комментарий