mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-31 15:47:10 -04:00
36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
|
#ifndef NON_INHERITING_PROCESS_HPP__
|
||
|
#define NON_INHERITING_PROCESS_HPP__
|
||
|
|
||
|
#include <QProcess>
|
||
|
#include "pimpl_h.hpp"
|
||
|
|
||
|
class QObject;
|
||
|
|
||
|
//
|
||
|
// class NonInheritingProcess - Manage a process without it inheriting
|
||
|
// all inheritable handles
|
||
|
//
|
||
|
// On MS Windows QProcess creates sub-processes which inherit all
|
||
|
// inheritable handles, and handles on Windows are inheritable by
|
||
|
// default. This can cause the lifetime of objects to be unexpectedly
|
||
|
// extended, which in turn can cause unexpected errors. The motivation
|
||
|
// for this class was implementing log file rotation using the Boost
|
||
|
// log library. The current log file's handle gets inherited by any
|
||
|
// long running sub-process started by QProcess and that causes a
|
||
|
// sharing violation when attempting to rename the log file on
|
||
|
// rotation, even though the log library closes the current log file
|
||
|
// before trying to rename it.
|
||
|
//
|
||
|
class NonInheritingProcess
|
||
|
: public QProcess
|
||
|
{
|
||
|
public:
|
||
|
NonInheritingProcess (QObject * parent = nullptr);
|
||
|
~NonInheritingProcess ();
|
||
|
|
||
|
private:
|
||
|
class impl;
|
||
|
pimpl<impl> m_;
|
||
|
};
|
||
|
#endif
|