bool Debounce(void) { if (fpsTimeLast.isElapsed(debounceTimeout.totalMicroseconds())) { fpsTimeLast.update(); return true; } else { return false; } }
bool Debounce(int dtime) { const Poco::Timespan TimeOut(0, 1000*dtime); if (fpsTimeLast.isElapsed(TimeOut.totalMicroseconds())) { fpsTimeLast.update(); return true; } else { return false; } }
int ICMPSocketImpl::receiveFrom(void*, int, SocketAddress& address, int flags) { int maxPacketSize = _icmpPacket.maxPacketSize(); unsigned char* buffer = new unsigned char[maxPacketSize]; try { Poco::Timestamp ts; do { if (ts.isElapsed(_timeout)) { // This guards against a possible DoS attack, where sending // fake ping responses will cause an endless loop. throw TimeoutException(); } SocketImpl::receiveFrom(buffer, maxPacketSize, address, flags); } while (!_icmpPacket.validReplyID(buffer, maxPacketSize)); } catch (TimeoutException&) { delete [] buffer; throw; } catch (Exception&) { std::string err = _icmpPacket.errorDescription(buffer, maxPacketSize); delete [] buffer; if (!err.empty()) throw ICMPException(err); else throw; } struct timeval then = _icmpPacket.time(buffer, maxPacketSize); struct timeval now = _icmpPacket.time(); int elapsed = (((now.tv_sec * 1000000) + now.tv_usec) - ((then.tv_sec * 1000000) + then.tv_usec))/1000; delete[] buffer; return elapsed; }
void run() { Poco::Timestamp lastScan; ItemInfoMap entries; scan(entries); while (!_stopped) { struct timespec timeout; timeout.tv_sec = 0; timeout.tv_nsec = 200000000; unsigned eventFilter = NOTE_WRITE; struct kevent event; struct kevent eventData; EV_SET(&event, _dirFD, EVFILT_VNODE, EV_ADD | EV_CLEAR, eventFilter, 0, 0); int nEvents = kevent(_queueFD, &event, 1, &eventData, 1, &timeout); if (nEvents < 0 || eventData.flags == EV_ERROR) { try { FileImpl::handleLastErrorImpl(owner().directory().path()); } catch (Poco::Exception& exc) { owner().scanError(&owner(), exc); } } else if (nEvents > 0 || ((owner().eventMask() & DirectoryWatcher::DW_ITEM_MODIFIED) && lastScan.isElapsed(owner().scanInterval()*1000000))) { ItemInfoMap newEntries; scan(newEntries); compare(entries, newEntries); std::swap(entries, newEntries); lastScan.update(); } } }