X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fforkedcontr.h;h=7f55c798d06e15bfdcdc77b045a995e5c286c5fd;hb=c8429d4bbc2e9291a6b5742233aecb089a3eece1;hp=6dbed1c7acc5da2a485422bd3e57a8c6af002655;hpb=eb5b07f615c67fd9077fd44a6c9111ba902c4cf6;p=lyx.git diff --git a/src/support/forkedcontr.h b/src/support/forkedcontr.h index 6dbed1c7ac..7f55c798d0 100644 --- a/src/support/forkedcontr.h +++ b/src/support/forkedcontr.h @@ -7,7 +7,7 @@ * \author Asger Alstrup Nielsen * \author Angus Leeming * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. * * A class for the control of child processes launched using * fork() and execvp(). @@ -16,50 +16,35 @@ #ifndef FORKEDCONTR_H #define FORKEDCONTR_H -#include "LString.h" +#include -#include -#include - -#include // needed for pid_t +#ifdef HAVE_SYS_TYPES_H +# include +#endif #include +#include #include -#ifdef __GNUG__ -#pragma interface -#endif + +namespace lyx { +namespace support { class ForkedProcess; -class Timeout; -class ForkedcallsController : public boost::signals::trackable { +class ForkedcallsController { public: - /// We need this to avoid warnings. - ForkedcallsController(); - /** This d-tor should really be private, but making it public - * allows egcs 1.1 to compile the class. - */ - ~ForkedcallsController(); - /// Get hold of the only controller that can exist inside the process. static ForkedcallsController & get(); /// Add a new child process to the list of controlled processes. void addCall(ForkedProcess const &); - /** This method is connected to the timer. Every XX ms it is called - * so that we can check on the status of the children. Those that - * are found to have finished are removed from the list and their - * callback function is passed the final return state. + /** Those child processes that are found to have finished are removed + * from the list and their callback function is passed the final + * return state. */ - void timer(); - - /// Return a vector of the pids of all the controlled processes. - std::vector const getPIDs() const; - - /// Get the command string of the process. - string const getCommand(pid_t) const; + void handleCompletedProcesses(); /** Kill this process prematurely and remove it from the list. * The process is killed within tolerance secs. @@ -67,22 +52,28 @@ public: */ void kill(pid_t, int tolerance = 5); - /// Signal emitted when the list of current child processes changes. - boost::signal0 childrenChanged; - private: - /// + ForkedcallsController(); ForkedcallsController(ForkedcallsController const &); + ~ForkedcallsController(); + + typedef boost::shared_ptr ForkedProcessPtr; + typedef std::list ListType; + typedef ListType::iterator iterator; + + iterator find_pid(pid_t); /// The child processes - typedef std::list ListType; - /// ListType forkedCalls; - - /** The timer. Enables us to check the status of the children - * every XX ms and to invoke a callback on completion. - */ - Timeout * timeout_; }; + +#if defined(_WIN32) +// a wrapper for GetLastError() and FormatMessage(). +std::string const getChildErrorMessage(); +#endif + +} // namespace support +} // namespace lyx + #endif // FORKEDCONTR_H