// headers
// ----------------------------------------------------------------------------
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
#include "wx/defs.h"
#include "wx/string.h"
#if defined( __MWERKS__ ) && defined(__MACH__)
#define WXWIN_OS_DESCRIPTION "MacOS X"
#define HAVE_NANOSLEEP
+#define HAVE_UNAME
#endif
// not only the statfs syscall is called differently depending on platform, but
sleep(nSecs);
}
-void wxUsleep(unsigned long milliseconds)
+void wxMicroSleep(unsigned long microseconds)
{
#if defined(HAVE_NANOSLEEP)
timespec tmReq;
- tmReq.tv_sec = (time_t)(milliseconds / 1000);
- tmReq.tv_nsec = (milliseconds % 1000) * 1000 * 1000;
+ tmReq.tv_sec = (time_t)(microseconds / 1000000);
+ tmReq.tv_nsec = (microseconds % 1000000) * 1000;
// we're not interested in remaining time nor in return value
(void)nanosleep(&tmReq, (timespec *)NULL);
#error "usleep() cannot be used in MT programs under Solaris."
#endif // Sun
- usleep(milliseconds * 1000); // usleep(3) wants microseconds
+ usleep(microseconds);
#elif defined(HAVE_SLEEP)
// under BeOS sleep() takes seconds (what about other platforms, if any?)
- sleep(milliseconds * 1000);
+ sleep(microseconds * 1000000);
#else // !sleep function
- #error "usleep() or nanosleep() function required for wxUsleep"
+ #error "usleep() or nanosleep() function required for wxMicroSleep"
#endif // sleep function
}
+void wxMilliSleep(unsigned long milliseconds)
+{
+ wxMicroSleep(milliseconds*1000);
+}
+
// ----------------------------------------------------------------------------
// process management
// ----------------------------------------------------------------------------
// start an xterm executing it.
if ( !(flags & wxEXEC_SYNC) )
{
- for ( int fd = 0; fd < FD_SETSIZE; fd++ )
+ // FD_SETSIZE is unsigned under BSD, signed under other platforms
+ // so we need a cast to avoid warnings on all platforms
+ for ( int fd = 0; fd < (int)FD_SETSIZE; fd++ )
{
if ( fd == pipeIn[wxPipe::Read]
|| fd == pipeOut[wxPipe::Write]
{
ARGS_CLEANUP;
+ // save it for WaitForChild() use
+ execData.pid = pid;
+
// prepare for IO redirection
#if wxUSE_STREAMS
#endif // !__WXMAC__
-int wxGetOsVersion(int *verMaj, int *verMin)
-{
- // we want this function to work even if there is no wxApp
- wxConsoleAppTraits traitsConsole;
- wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
- if ( ! traits )
- traits = &traitsConsole;
-
- return traits->GetOSVersion(verMaj, verMin);
-}
-
unsigned long wxGetProcessId()
{
return (unsigned long)getpid();
s << _T('=') << value;
// transform to ANSI
- const char *p = s.mb_str();
+ const wxWX2MBbuf p = s.mb_str();
// the string will be free()d by libc
char *buf = (char *)malloc(strlen(p) + 1);
return putenv(buf) == 0;
#else // no way to set an env var
- return FALSE;
+ return false;
#endif
}
// process terminates
while ( endProcData->pid != 0 )
{
+ bool idle = true;
+
#if wxUSE_STREAMS
if ( execData.bufOut )
+ {
execData.bufOut->Update();
+ idle = false;
+ }
if ( execData.bufErr )
+ {
execData.bufErr->Update();
+ idle = false;
+ }
#endif // wxUSE_STREAMS
+ // don't consume 100% of the CPU while we're sitting in this
+ // loop
+ if ( idle )
+ wxMilliSleep(1);
+
// give GTK+ a chance to call GTK_EndProcessDetector here and
// also repaint the GUI
wxYield();
}
}
+#endif // wxUSE_GUI
+#if wxUSE_BASE
+
void wxHandleProcessTermination(wxEndProcessData *proc_data)
{
// notify user about termination if required
}
}
-#endif // wxUSE_GUI
-
+#endif // wxUSE_BASE