AsyncFw 1.2
Async Framework is c++ runtime with timers, poll notifiers, sockets, coroutines, etc.
 
Loading...
Searching...
No Matches
AsyncFw::FunctionConnector< Args > Class Template Reference

Обеспечивает соединение отправитель -> получатели. Получатели могут быть вызваны в своих потоках (по умолчанию). More...

#include <AsyncFw/FunctionConnector>

Inheritance diagram for AsyncFw::FunctionConnector< Args >:
[legend]
Collaboration diagram for AsyncFw::FunctionConnector< Args >:
[legend]

Public Member Functions

template<typename T>
Connection & operator() (T f, Connection::Type t=Connection::Default)
 Подключиться
 
template<typename O, typename M>
Connection & connect (O *o, M m, Connection::Type t=Connection::Default)
 Подключиться
 
void operator() (Args... args)
 Отправить
 
 AbstractFunctionConnector (ConnectionType=Auto)
 
- Public Member Functions inherited from AsyncFw::AbstractFunctionConnector
 AbstractFunctionConnector (ConnectionType=Auto)
 

Additional Inherited Members

- Public Types inherited from AsyncFw::AbstractFunctionConnector
enum  ConnectionType : uint8_t {
  Auto = 0 , Direct = 0x01 , Queued = 0x02 , Sync = 0x04 ,
  AutoOnly = 0x10 , DirectOnly = 0x11 , QueuedOnly = 0x12 , SyncOnly = 0x14
}
 
- Protected Attributes inherited from AsyncFw::AbstractFunctionConnector
std::vector< Connection * > list
 
ConnectionType defaultConnectionType
 
std::mutex mutex
 

Detailed Description

template<typename... Args>
class AsyncFw::FunctionConnector< Args >

Обеспечивает соединение отправитель -> получатели. Получатели могут быть вызваны в своих потоках (по умолчанию).

Другие инструментальные средства реализуют подобную коммуникацию с помощью коллбэков. Коллбэк - это указатель на функцию, поэтому, если вы хотите, чтобы функция обработки уведомила вас о каком-либо событии, вы передаете указатель на другую функцию (коллбэк) в функцию обработки. Затем функция обработки вызывает коллбэк, когда это необходимо.

Example:

#include <AsyncFw/FunctionConnector>
#include <AsyncFw/MainThread>
#include <AsyncFw/Timer>
#include <AsyncFw/Log>
class MethodConnectionExample {
public:
void method(int val) { lsNotice() << val; }
};
class Sender {
public:
Sender() {
timer.timeout([this]() {
AsyncFw::AbstractThread *ct = AsyncFw::AbstractThread::currentThread();
logInfo() << cnt << "send from thread:" << ct->name() << ct->id();
connector(cnt++);
if (cnt == 3) AsyncFw::MainThread::exit(0);
});
timer.start(100);
}
mutable AsyncFw::FunctionConnectorProtected<Sender>::Connector<int> connector;
private:
int cnt = 0;
AsyncFw::Timer timer;
};
class Receiver {
public:
Receiver(const std::string &name, const Sender &sender) {
fcg = sender.connector([name_ = name](int val) {
AsyncFw::AbstractThread *ct = AsyncFw::AbstractThread::currentThread();
logInfo() << name_ << "received" << val << "run in thread" << ct->name() << ct->id();
});
}
AsyncFw::FunctionConnectionGuard fcg;
};
int main(int argc, char *argv[]) {
Sender *sender;
AsyncFw::Thread thread("SenderThread");
thread.start();
thread.invokeMethod(
[&sender]() {
sender = new Sender; // created in thread SenderThread
},
true);
Receiver receiver1("R1", *sender);
Receiver receiver2("R2", *sender);
MethodConnectionExample tst;
sender->connector.connect(&tst, &MethodConnectionExample::method);
sender->connector([](int val) { lsNotice() << "sender->connector (lambda)" << val; });
logNotice() << "Start Applicaiton";
int ret = AsyncFw::MainThread::exec();
logNotice() << "End Applicaiton";
delete sender;
return ret;
}

The documentation for this class was generated from the following file: