void R3DComputeMatchesThread::prepareResultStrings(const R3DComputeMatches::R3DComputeMatchesStatistics &statistics, wxTimeSpan runTime) { resultStrings_.Clear(); const std::vector<int> &numberOfKeypoints = statistics.numberOfKeypoints_; if(!numberOfKeypoints.empty()) { accumulator_set<int, stats<tag::median, tag::min, tag::max, tag::mean> > acc; for(size_t i = 0; i < numberOfKeypoints.size(); i++) { acc(numberOfKeypoints[i]); } resultStrings_.Add(wxT("Keypoints per image (min/max/avg/median)")); resultStrings_.Add(wxString::Format(wxT("%d/%d/%d/%d"), (min)(acc), (max)(acc), static_cast<int>(mean(acc)), static_cast<int>(median(acc)))); } pComputeMatches_->numberOfKeypoints_ = numberOfKeypoints; wxString runTimeStr; if(runTime.GetHours() > 0) runTimeStr = runTime.Format(wxT("%H:%M:%S.%l")); else runTimeStr = runTime.Format(wxT("%M:%S.%l")); resultStrings_.Add(wxT("Elapsed time")); resultStrings_.Add(runTimeStr); pComputeMatches_->runningTime_ = runTimeStr; }
void serverPage::EnableCaching(wxTimeSpan expire_span) { wxDateTime expire_date = wxDateTime::Now() + expire_span; D(debug("serverPage::EnableCaching(%s)\n", expire_span.Format(wxDefaultTimeSpanFormat).c_str())); m_bEnableCaching = true; m_sCacheExpires = expire_date.Format(wxT("%a, %d %b %Y %T GMT") , wxDateTime::UTC ); return; }
wxFileOffset CStatusLineCtrl::GetCurrentSpeed() { if (!m_pStatus) return -1; const wxTimeSpan timeDiff( wxDateTime::UNow().Subtract(m_gcLastTimeStamp) ); if (timeDiff.GetMilliseconds().GetLo() <= 2000) return m_gcLastSpeed; m_gcLastTimeStamp = wxDateTime::UNow(); if (m_gcLastOffset == -1) m_gcLastOffset = m_pStatus->startOffset; const wxFileOffset fileOffsetDiff = m_pStatus->currentOffset - m_gcLastOffset; m_gcLastOffset = m_pStatus->currentOffset; m_gcLastSpeed = fileOffsetDiff * 1000 / timeDiff.GetMilliseconds().GetLo(); return m_gcLastSpeed; }
void CFileZillaEnginePrivate::RegisterFailedLoginAttempt(const CServer& server, bool critical) { std::list<t_failedLogins>::iterator iter = m_failedLogins.begin(); while (iter != m_failedLogins.end()) { const wxTimeSpan span = wxDateTime::UNow() - iter->time; if (span.GetSeconds() >= m_pOptions->GetOptionVal(OPTION_RECONNECTDELAY) || iter->server == server || (!critical && (iter->server.GetHost() == server.GetHost() && iter->server.GetPort() == server.GetPort()))) { std::list<t_failedLogins>::iterator prev = iter; iter++; m_failedLogins.erase(prev); } else iter++; } t_failedLogins failure; failure.server = server; failure.time = wxDateTime::UNow(); m_failedLogins.push_back(failure); }
bool CUpdater::LongTimeSinceLastCheck() const { wxString const lastCheckStr = COptions::Get()->GetOption(OPTION_UPDATECHECK_LASTDATE); if (lastCheckStr == _T("")) return true; wxDateTime lastCheck; lastCheck.ParseDateTime(lastCheckStr); if (!lastCheck.IsValid()) return true; wxTimeSpan const span = wxDateTime::Now() - lastCheck; if (span.GetSeconds() < 0) // Last check in future return true; int days = 1; if (!CBuildInfo::IsUnstable()) days = COptions::Get()->GetOptionVal(OPTION_UPDATECHECK_INTERVAL); return span.GetDays() >= days; }
unsigned int CFileZillaEnginePrivate::GetRemainingReconnectDelay(const CServer& server) { std::list<t_failedLogins>::iterator iter = m_failedLogins.begin(); while (iter != m_failedLogins.end()) { const wxTimeSpan span = wxDateTime::UNow() - iter->time; const int delay = m_pOptions->GetOptionVal(OPTION_RECONNECTDELAY); if (span.GetSeconds() >= delay) { std::list<t_failedLogins>::iterator prev = iter; iter++; m_failedLogins.erase(prev); } else if (!iter->critical && iter->server.GetHost() == server.GetHost() && iter->server.GetPort() == server.GetPort()) return delay * 1000 - span.GetMilliseconds().GetLo(); else if (iter->server == server) return delay * 1000 - span.GetMilliseconds().GetLo(); else iter++; } return 0; }
bool Threading::Semaphore::WaitWithoutYield(const wxTimeSpan& timeout) { // This method is the reason why there has to be a special Darwin // implementation of Semaphore. Note that semaphore_timedwait() is prone // to returning with KERN_ABORTED, which basically signifies that some // signal has worken it up. The best official "documentation" for // semaphore_timedwait() is the way it's used in Grand Central Dispatch, // which is open-source. // on x86 platforms, mach_absolute_time() returns nanoseconds // TODO(aktau): on iOS a scale value from mach_timebase_info will be necessary u64 const kOneThousand = 1000; u64 const kOneBillion = kOneThousand * kOneThousand * kOneThousand; u64 const delta = timeout.GetMilliseconds().GetValue() * (kOneThousand * kOneThousand); mach_timespec_t ts; kern_return_t kr = KERN_ABORTED; for (u64 now = mach_absolute_time(), deadline = now + delta; kr == KERN_ABORTED; now = mach_absolute_time()) { if (now > deadline) { // timed out by definition return false; } u64 timeleft = deadline - now; ts.tv_sec = timeleft / kOneBillion; ts.tv_nsec = timeleft % kOneBillion; // possible return values of semaphore_timedwait() (from XNU sources): // internal kernel val -> return value // THREAD_INTERRUPTED -> KERN_ABORTED // THREAD_TIMED_OUT -> KERN_OPERATION_TIMED_OUT // THREAD_AWAKENED -> KERN_SUCCESS // THREAD_RESTART -> KERN_TERMINATED // default -> KERN_FAILURE kr = semaphore_timedwait(m_sema, ts); } if (kr == KERN_OPERATION_TIMED_OUT) { return false; } // while it's entirely possible to have KERN_FAILURE here, we should // probably assert so we can study and correct the actual error here // (the thread dying while someone is wainting for it). MACH_CHECK(kr); __atomic_sub_fetch(&m_counter, 1, __ATOMIC_SEQ_CST); return true; }
void mmStockDialog::OnHistoryDownloadButton(wxCommandEvent& /*event*/) { /* Example stock history download: https://code.google.com/p/yahoo-finance-managed/wiki/csvHistQuotesDownload */ if (m_stock->SYMBOL.IsEmpty()) return; const wxDateTime& StartDate = Model_Stock::PURCHASEDATE(m_stock); wxDateTime EndDate = wxDate::Today(); const wxTimeSpan time = EndDate - StartDate; long intervalMonths = EndDate.GetMonth() - StartDate.GetMonth() + 12 * (EndDate.GetYear() - StartDate.GetYear()) - (EndDate.GetDay() < StartDate.GetDay()); //Define frequency enum { DAILY, WEEKLY, MONTHLY }; wxArrayString FreqStrs; FreqStrs.Add(_("Days")); FreqStrs.Add(_("Weeks")); if (intervalMonths > 0) FreqStrs.Add(_("Months")); int freq = wxGetSingleChoiceIndex(_("Specify type frequency of stock history") , _("Stock History Update"), FreqStrs); long interval = 0; switch (freq) { case DAILY: interval = time.GetDays(); break; case WEEKLY: interval = time.GetWeeks(); break; case MONTHLY: interval = intervalMonths; break; default: return; } int nrPrices = (int) wxGetNumberFromUser(_("Specify how many stock history prices download from purchase date") , wxString::Format(_("Number of %s:"), FreqStrs.Item(freq).Lower()), _("Stock History Update") , interval, 1L, 9999L, this, wxDefaultPosition); if (nrPrices <= 0) { mmErrorDialogs::MessageInvalid(this, FreqStrs[freq]); return; } else { switch (freq) { case DAILY: EndDate = wxDate(StartDate).Add(wxDateSpan::Days(nrPrices)); break; case WEEKLY: EndDate = wxDate(StartDate).Add(wxDateSpan::Weeks(nrPrices)); break; case MONTHLY: EndDate = wxDate(StartDate).Add(wxDateSpan::Months(nrPrices)); break; default: break; } } if (EndDate > wxDate::Today()) { mmErrorDialogs::MessageWarning(this, _("End date is in the future\nQuotes will be updated until today") , _("Stock History Error")); EndDate = wxDate::Today(); } wxString CSVQuotes; wxString URL = mmex::weblink::YahooQuotesHistory; URL += m_stock->SYMBOL; URL += wxString::Format("&a=%i", StartDate.GetMonth()); URL += wxString::Format("&b=%i", StartDate.GetDay()); URL += wxString::Format("&c=%i", StartDate.GetYear()); URL += wxString::Format("&d=%i", EndDate.GetMonth()); URL += wxString::Format("&e=%i", EndDate.GetDay()); URL += wxString::Format("&f=%i", EndDate.GetYear()); switch (freq) { case DAILY: URL += "&g=d"; break; case WEEKLY: URL += "&g=w"; break; case MONTHLY: URL += "&g=m"; break; default: break; } URL += "&ignore=.csv"; wxLogDebug("Start Date:%s End Date:%s URL:%s", StartDate.FormatISODate(), EndDate.FormatISODate(), URL); int err_code = site_content(URL, CSVQuotes); if (err_code != wxURL_NOERR) { if (err_code == -1) CSVQuotes = _("Stock history not found!"); mmErrorDialogs::MessageError(this, CSVQuotes, _("Stock History Error")); return; } double dPrice; wxString dateStr; Model_StockHistory::Data *data; wxStringTokenizer tkz(CSVQuotes, "\r\n"); Model_StockHistory::instance().Savepoint(); while (tkz.HasMoreTokens()) { wxStringTokenizer tkzSingleLine(tkz.GetNextToken(), ","); std::vector<wxString> tokens; while (tkzSingleLine.HasMoreTokens()) { const wxString& token = tkzSingleLine.GetNextToken(); tokens.push_back(token); } if (tokens[0].Contains("-")) { dateStr = tokens[0]; tokens[6].ToDouble(&dPrice); if (Model_StockHistory::instance().find( Model_StockHistory::SYMBOL(m_stock->SYMBOL), Model_StockHistory::DB_Table_STOCKHISTORY_V1::DATE(dateStr) ).size() == 0 && dPrice > 0) { data = Model_StockHistory::instance().create(); data->SYMBOL = m_stock->SYMBOL; data->DATE = dateStr; data->VALUE = dPrice; data->UPDTYPE = Model_StockHistory::ONLINE; Model_StockHistory::instance().save(data); } } } Model_StockHistory::instance().ReleaseSavepoint(); showStockHistory(); }
DTime DTime::operator-(const wxTimeSpan& span) const { return operator+(span.Negate()); }
bool wxTimeSpinCtrl::SetValue(const wxTimeSpan &span) { m_txt->SetValue(span.Format(m_format)); spinValue = span.GetSeconds().GetLo(); return true; }
void PlayListStep::AdjustTime(wxTimeSpan by) { _startTime += by.GetValue(); }