int main(int argc, char* argv[]) { printf("main:tid:%d\n", CurrentThread::tid()); EventLoopThread loopThread; EventLoop* loop = loopThread.startLoop(); loop->runInLoop(runInThread); sleep(1); loop->runAfter(2, runInThread); loop->quit(); printf("exit main\n"); }
void test_net() { // Signal_ignore<SIGPIPE> __; Signal::signal(SIGPIPE, []() { LOG_INFO << "SIGPIPE OCCR"; }); ThreadInit _init; EventLoop service; assert(service.IsInLoop()); LOG_INFO << "test time " << LocalClock::Now().ToString() ; LOG_INFO << "test time " << LocalClock::ToDay().ToString() ; NetAddr addr(8060); Accepter accepter(&service, addr, false); accepter.setNewConnectionCallBack([&service](int sockfd, const NetAddr & a) { LOG_INFO << "socket " << sockfd << " New Connection ,address " << a.IpPort(); TcpConPtr ptr( new TcpConnection(&service, sockfd)); ptr->ReadCallBack([](const TcpConPtr & conn) { auto &buf = *( conn->readBuffer() ); int len = buf.ReadAbleBytes(); std::string str(buf.data(), len); buf.retireRead(len); LOG_INFO << " read " << len ;//<< " msg:" << str; conn->Send(str); }); ptr->closeCallBack([](const TcpConPtr & conn) { if (conn.use_count() == 1) { LOG_INFO << "close And debug----"; } else { LOG_INFO << "just erase"; } auto &m = Conns(); auto i = std::find(m.begin(), m.end(), conn); if (i != m.end()) { m.erase(i); } LOG_INFO << "close TcpConnection from server"; }); ptr->Start(); Conns().push_back(ptr); }); LOG_INFO << fmt("%p", (void*)&service); accepter.listen(); Signal::signal(SIGINT, [&]() { auto & ts = Conns(); for (auto &i : ts) { i->forceClose(); } ts.clear(); service.quit(); }); service.Loop(); LOG_DEBUG << "out of loop"; };