wxExecute may only be called from the main thread
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19363 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -535,8 +535,13 @@ a process (always synchronously) and capture its output in the array
|
||||
{\it output}. The fourth version adds the possibility to additionally capture
|
||||
the messages from standard error output in the {\it errors} array.
|
||||
|
||||
See also \helpref{wxShell}{wxshell}, \helpref{wxProcess}{wxprocess},
|
||||
\helpref{Exec sample}{sampleexec}.
|
||||
{\bf NB:} Currently wxExecute() can only be used from the main thread, calling
|
||||
this function from another thread will result in an assert failure in debug
|
||||
build and won't work.
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
\helpref{wxShell}{wxshell}, \helpref{wxProcess}{wxprocess}, \helpref{Exec sample}{sampleexec}.
|
||||
|
||||
\wxheading{Parameters}
|
||||
|
||||
|
@@ -492,6 +492,14 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler)
|
||||
{
|
||||
wxCHECK_MSG( !!cmd, 0, wxT("empty command in wxExecute") );
|
||||
|
||||
#if wxUSE_THREADS
|
||||
// for many reasons, the code below breaks down if it's called from another
|
||||
// thread -- this could be fixed, but as Unix versions don't support this
|
||||
// neither I don't want to waste time on this now
|
||||
wxASSERT_MSG( wxThread::IsMain(),
|
||||
_T("wxExecute() can be called only from the main thread") );
|
||||
#endif // wxUSE_THREADS
|
||||
|
||||
wxString command;
|
||||
|
||||
#if wxUSE_IPC
|
||||
|
@@ -203,6 +203,16 @@ long wxExecute( const wxString& command, int flags, wxProcess *process )
|
||||
{
|
||||
wxCHECK_MSG( !command.IsEmpty(), 0, wxT("can't exec empty command") );
|
||||
|
||||
#if wxUSE_THREADS
|
||||
// fork() doesn't mix well with POSIX threads: on many systems the program
|
||||
// deadlocks or crashes for some reason. Probably our code is buggy and
|
||||
// doesn't do something which must be done to allow this to work, but I
|
||||
// don't know what yet, so for now just warn the user (this is the least we
|
||||
// can do) about it
|
||||
wxASSERT_MSG( wxThread::IsMain(),
|
||||
_T("wxExecute() can be called only from the main thread") );
|
||||
#endif // wxUSE_THREADS
|
||||
|
||||
int argc = 0;
|
||||
wxChar *argv[WXEXECUTE_NARGS];
|
||||
wxString argument;
|
||||
|
Reference in New Issue
Block a user