void wxCFEventLoop::DoYieldFor(long eventsToProcess) { // process all pending events: while ( DoProcessEvents() == 1 ) ; wxEventLoopBase::DoYieldFor(eventsToProcess); }
void wxCFEventLoop::OSXDoRun() { for ( ;; ) { OnNextIteration(); // generate and process idle events for as long as we don't // have anything else to do DoProcessEvents(); // if the "should exit" flag is set, the loop should terminate // but not before processing any remaining messages so while // Pending() returns true, do process them if ( m_shouldExit ) { while ( DoProcessEvents() == 1 ) ; break; } // Process the remaining queued messages, both at the level of the // underlying toolkit level (Pending/Dispatch()) and wx level // (Has/ProcessPendingEvents()). // // We do run the risk of never exiting this loop if pending event // handlers endlessly generate new events but they shouldn't do // this in a well-behaved program and we shouldn't just discard the // events we already have, they might be important. for ( ;; ) { bool hasMoreEvents = false; if ( wxTheApp && wxTheApp->HasPendingEvents() ) { wxTheApp->ProcessPendingEvents(); hasMoreEvents = true; } if ( !hasMoreEvents ) break; } } }
void wxCFEventLoop::OSXDoRun() { for ( ;; ) { // generate and process idle events for as long as we don't // have anything else to do DoProcessEvents(); // if the "should exit" flag is set, the loop should terminate // but not before processing any remaining messages so while // Pending() returns true, do process them if ( m_shouldExit ) { while ( DoProcessEvents() == 1 ) ; break; } } }
void wxCFEventLoop::DoYieldFor(long eventsToProcess) { // process all pending events: while ( DoProcessEvents() == 1 ) ; // it's necessary to call ProcessIdle() to update the frames sizes which // might have been changed (it also will update other things set from // OnUpdateUI() which is a nice (and desired) side effect) while ( ProcessIdle() ) {} wxEventLoopBase::DoYieldFor(eventsToProcess); }
bool wxCFEventLoop::YieldFor(long eventsToProcess) { #if wxUSE_THREADS // Yielding from a non-gui thread needs to bail out, otherwise we end up // possibly sending events in the thread too. if ( !wxThread::IsMain() ) { return true; } #endif // wxUSE_THREADS m_isInsideYield = true; m_eventsToProcessInsideYield = eventsToProcess; #if wxUSE_LOG // disable log flushing from here because a call to wxYield() shouldn't // normally result in message boxes popping up &c wxLog::Suspend(); #endif // wxUSE_LOG // process all pending events: while ( DoProcessEvents() == 1 ) ; // it's necessary to call ProcessIdle() to update the frames sizes which // might have been changed (it also will update other things set from // OnUpdateUI() which is a nice (and desired) side effect) while ( ProcessIdle() ) {} // if there are pending events, we must process them. if (wxTheApp) wxTheApp->ProcessPendingEvents(); #if wxUSE_LOG wxLog::Resume(); #endif // wxUSE_LOG m_isInsideYield = false; return true; }
bool wxCFEventLoop::Dispatch() { return DoProcessEvents() != 0; }
bool MakeBuild::Build(const Workspace& wspc, String mainparam, String outfile, bool clear_console) { String hfile = outfile + ".xxx"; SaveFile(hfile, ""); FileTime start_time = GetFileTime(hfile); // Defensive way to get correct filetime of start DeleteFile(hfile); ClearErrorEditor(); BeginBuilding(true, clear_console); bool ok = true; if(wspc.GetCount()) { for(int i = 0; i < wspc.GetCount(); i++) { const Package& pk = wspc.package[i]; for(int j = 0; j < pk.GetCount(); j++) if(pk[j] == "main.conf") { String pn = wspc[i]; String p = SourcePath(pn, "main.conf"); main_conf << "// " << pn << "\r\n" << LoadFile(p) << "\r\n"; PutConsole("Found " + p); } } if(main_conf.GetCount()) { VectorMap<String, String> bm = GetMethodVars(method); One<Host> host = CreateHost(false); One<Builder> b = CreateBuilder(~host); if(b) { Index<String> mcfg = PackageConfig(wspc, 0, bm, mainparam, *host, *b, NULL); String outdir = OutDir(mcfg, wspc[0], bm, false); String path = AppendFileName(outdir, "main.conf.h"); RealizePath(path); SaveChangedFile(path, main_conf); PutConsole("Saving " + path); add_includes << outdir << ';'; } } Vector<int> build_order; if(GetTargetMode().linkmode != 2) { for(int i = 1; i < wspc.GetCount(); i++) build_order.Add(i); } else { Index<int> remaining; for(int i = 1; i < wspc.GetCount(); i++) remaining.Add(i); while(!remaining.IsEmpty()) { int t; for(t = 0; t < remaining.GetCount(); t++) { const Package& pk = wspc.package[remaining[t]]; bool delay = false; for(int u = 0; u < pk.uses.GetCount(); u++) if(remaining.Find(wspc.package.Find(pk.uses[u].text)) >= 0) { delay = true; break; } if(!delay) break; } if(t >= remaining.GetCount()) t = 0; build_order.Add(remaining[t]); remaining.Remove(t); } } String mainpackage = wspc[0]; Vector<String> linkfile; String linkopt = GetMethodVars(method).Get(targetmode ? "RELEASE_LINK" : "DEBUG_LINK", Null); if(linkopt.GetCount()) linkopt << ' '; ok = true; int ms = msecs(); for(int i = 0; i < build_order.GetCount() && (ok || !stoponerrors); i++) { int px = build_order[i]; ok = BuildPackage(wspc, px, i, build_order.GetCount() + 1, mainparam, Null, linkfile, linkopt) && ok; if(msecs() - ms >= 200) { DoProcessEvents(); ms = msecs(); } } if(ok || !stoponerrors) { ok = BuildPackage(wspc, 0, build_order.GetCount(), build_order.GetCount() + 1, mainparam, outfile, linkfile, linkopt, ok) && ok; // Set the time of target to start-time, so that if any file changes during // compilation, it is recompiled during next build SetFileTime(target, start_time); } } EndBuilding(ok); ReQualifyCodeBase(); SetErrorEditor(); return ok; }