From: <da...@us...> - 2007-10-30 23:15:56
|
Revision: 2515 http://hugin.svn.sourceforge.net/hugin/?rev=2515&view=rev Author: dangelo Date: 2007-10-30 16:15:54 -0700 (Tue, 30 Oct 2007) Log Message: ----------- Use wxInputStream::CanRead() instead of wxProcess::IsInputAvailable() to check for output from the child process. IsInputAvailable() uses polling and consumes as much CPU as it can get. Autopano run from within hugin should be twice as fast now. Disabled running the programs in an external xterm. Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp Modified: hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2007-10-29 22:37:49 UTC (rev 2514) +++ hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2007-10-30 23:15:54 UTC (rev 2515) @@ -107,24 +107,8 @@ command = utils::wxQuoteFilename(command); wxString cmdline = command + wxT(" ") + args; - // other unix like operating system - if (wxConfig::Get()->Read(wxT("/ExecDialog/Enabled2"), HUGIN_EXECDIALOG_ENABLED2)) - { - MyExternalCmdExecDialog dlg(parent, wxID_ANY); - return dlg.ShowModal(cmdline); - } else { - - wxString terminal = wxConfigBase::Get()->Read(wxT("terminalEmulator"), wxT(HUGIN_STITCHER_TERMINAL)); - wxString commandstr = terminal + wxT("'") + cmdline + wxString(wxT(" || read dummy'")); - // execute commands.. - DEBUG_TRACE("Executing command: " << (const char *)commandstr.mb_str()); - int ret = wxExecute(commandstr, wxEXEC_SYNC); - - if (ret == -1) { - wxLogError(_("Error executing command:\n") + commandstr); - } - return ret; - } + MyExternalCmdExecDialog dlg(parent, wxID_ANY); + return dlg.ShowModal(cmdline); #endif } @@ -203,18 +187,19 @@ bool MyPipedProcess::HasInput() { bool hasInput = false; - - if ( IsInputAvailable() ) + + wxTextInputStream tis(*GetInputStream()); +// if ( IsInputAvailable() ) + if (GetInputStream()->CanRead() ) { DEBUG_DEBUG("input available"); - wxTextInputStream tis(*GetInputStream()); wxTextCtrl * tb = m_parent->GetLogTextBox(); // does not assume line buffered stream. // tries to handle backspace chars properly wxString text = tb->GetValue(); - while(IsInputAvailable()) + while(GetInputStream()->CanRead()) { wxChar c = tis.GetChar(); if (c) { @@ -236,21 +221,21 @@ tb->ShowPosition(tb->GetLastPosition()); hasInput = true; } - - if ( IsErrorAvailable() ) + + wxTextInputStream tes(*GetErrorStream()); +// if ( IsErrorAvailable() ) + if (GetErrorStream()->CanRead()) { DEBUG_DEBUG("error available"); - - wxTextInputStream tis(*GetErrorStream()); - + // does not assume line buffered stream. // tries to handle backspace chars properly wxTextCtrl * tb = m_parent->GetLogTextBox(); wxString text = tb->GetValue(); - - while(IsErrorAvailable()) + + while(GetErrorStream()->CanRead()) { - wxChar c = tis.GetChar(); + wxChar c = tes.GetChar(); if (c) { if (c == '\b') { // backspace @@ -265,7 +250,7 @@ } } } - + tb->SetValue(text); tb->ShowPosition(tb->GetLastPosition()); hasInput = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2007-11-15 22:49:25
|
Revision: 2535 http://hugin.svn.sourceforge.net/hugin/?rev=2535&view=rev Author: dangelo Date: 2007-11-15 14:49:24 -0800 (Thu, 15 Nov 2007) Log Message: ----------- fixed crash when cancelling the execution of the process Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp Modified: hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2007-11-15 22:27:54 UTC (rev 2534) +++ hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2007-11-15 22:49:24 UTC (rev 2535) @@ -117,19 +117,22 @@ void MyExecDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) { - wxKillError rc = wxProcess::Kill(m_pidLast, wxSIGTERM); - if ( rc != wxKILL_OK ) { - static const wxChar *errorText[] = - { - _T(""), // no error - _T("signal not supported"), - _T("permission denied"), - _T("no such process"), - _T("unspecified error"), - }; + if (m_pidLast) { + DEBUG_DEBUG("Killing process " << m_pidLast << " with sigterm"); + wxKillError rc = wxProcess::Kill(m_pidLast, wxSIGTERM, wxKILL_CHILDREN); + if ( rc != wxKILL_OK ) { + static const wxChar *errorText[] = + { + _T(""), // no error + _T("signal not supported"), + _T("permission denied"), + _T("no such process"), + _T("unspecified error"), + }; - wxLogStatus(_("Failed to kill process %ld with sigterm: %s"), - m_pidLast, errorText[rc]); + wxLogStatus(_("Failed to kill process %ld with sigterm: %s"), + m_pidLast, errorText[rc]); + } } } @@ -140,10 +143,10 @@ return -1; MyPipedProcess *process = new MyPipedProcess(this, cmd); - if ( !wxExecute(cmd, wxEXEC_ASYNC, process) ) + m_pidLast = wxExecute(cmd, wxEXEC_ASYNC|wxEXEC_MAKE_GROUP_LEADER, process); + if ( m_pidLast == 0 ) { wxLogError(_T("Execution of '%s' failed."), cmd.c_str()); - delete process; return -1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-03 20:42:48
|
Revision: 2781 http://hugin.svn.sourceforge.net/hugin/?rev=2781&view=rev Author: dangelo Date: 2008-02-03 12:42:46 -0800 (Sun, 03 Feb 2008) Log Message: ----------- fix compilation on windows Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp Modified: hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-02-03 20:39:56 UTC (rev 2780) +++ hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-02-03 20:42:46 UTC (rev 2781) @@ -262,10 +262,12 @@ } else { #ifdef __WXMSW__ if (lastCR) { - // need to move to front? - currLine = currLine.beforeLast('\n'); - if(currLine.size() > 0) { - currLine.Append('\n'); + // back to start of line + if (currLine.Last() != wxChar('\n') ) { + currLine = currLine.BeforeLast('\n'); + if(currLine.size() > 0) { + currLine.Append('\n'); + } } } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-18 18:06:11
|
Revision: 2891 http://hugin.svn.sourceforge.net/hugin/?rev=2891&view=rev Author: dangelo Date: 2008-02-18 10:06:06 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Windows: Need to kill processes with SIGKILL. fixes [ 1893917 ] Can't interrupt autopano Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp Modified: hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-02-18 18:02:39 UTC (rev 2890) +++ hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-02-18 18:06:06 UTC (rev 2891) @@ -117,8 +117,13 @@ void MyExecPanel::KillProcess() { if (m_pidLast) { +#ifdef __WXMSW__ + DEBUG_DEBUG("Killing process " << m_pidLast << " with sigkill"); + wxKillError rc = wxProcess::Kill(m_pidLast, wxSIGKILL, wxKILL_CHILDREN); +#else DEBUG_DEBUG("Killing process " << m_pidLast << " with sigterm"); wxKillError rc = wxProcess::Kill(m_pidLast, wxSIGTERM, wxKILL_CHILDREN); +#endif if ( rc != wxKILL_OK ) { static const wxChar *errorText[] = { @@ -129,7 +134,7 @@ _T("unspecified error"), }; - wxLogError(_("Failed to kill process %ld with sigterm, error %d: %s"), + wxLogError(_("Failed to kill process %ld, error %d: %s"), m_pidLast, rc, errorText[rc]); } } @@ -420,11 +425,15 @@ wxBoxSizer * topsizer = new wxBoxSizer( wxVERTICAL ); m_execPanel = new MyExecPanel(this); - topsizer->Add(m_execPanel, 1, wxEXPAND | wxALL, 10); + topsizer->Add(m_execPanel, 1, wxEXPAND | wxALL, 2); topsizer->Add( new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALL | wxALIGN_RIGHT, 10); +#ifdef __WXMSW__ + // wxFrame does have a strange background color on Windows.. + this->SetBackgroundColour(m_execPanel->GetBackgroundColour()); +#endif SetSizer( topsizer ); // topsizer->SetSizeHints( this ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-06-25 16:24:00
|
Revision: 3146 http://hugin.svn.sourceforge.net/hugin/?rev=3146&view=rev Author: dangelo Date: 2008-06-25 09:23:57 -0700 (Wed, 25 Jun 2008) Log Message: ----------- added some debug statements Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp Modified: hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-06-24 19:33:54 UTC (rev 3145) +++ hugin/trunk/src/hugin1/base_wx/MyExternalCmdExecDialog.cpp 2008-06-25 16:23:57 UTC (rev 3146) @@ -327,7 +327,7 @@ void MyExecPanel::OnProcessTerminated(MyPipedProcess *process, int pid, int status) { - DEBUG_TRACE(""); + DEBUG_TRACE("process terminated: pid " << pid << " exit code:" << status); // show the rest of the output AddToOutput(*(process->GetInputStream())); AddToOutput(*(process->GetErrorStream())); @@ -401,7 +401,7 @@ void MyPipedProcess::OnTerminate(int pid, int status) { - DEBUG_TRACE(""); + DEBUG_DEBUG("Process " << pid << " terminated with return code: " << status); m_parent->OnProcessTerminated(this, pid, status); MyProcess::OnTerminate(pid, status); @@ -440,6 +440,7 @@ void MyExecDialog::OnProcessTerminate(wxProcessEvent & event) { + DEBUG_DEBUG("Process terminated with return code: " << event.GetExitCode()); EndModal(event.GetExitCode()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |