Manages the sharing of an NProgress object between reading and writing threads.
The life cycle of an NProgressManager and the corresponding NProgress is as follows. Note that the reading thread is the interface thread that is querying the state of progress, and the writing thread is the thread in which the operation is actually being performed.
- Before the operation begins, an NProgressManager is created and both the reading and writing threads have access to it. This can be achieved for instance by having the reading thread create an NProgressManager and pass it to the writing thread as a parameter of the actual operation function call.
- The writing thread:
- The reading thread:
- repeatedly calls isStarted() and waits until this returns
true
;
- now knows the NProgress has been created and begins querying it using getProgress() and displaying progress reports;
- whilst querying, repeatedly calls isFinished() to test if the operation is complete;
- once isFinished() returns
true
, displays the final progress message to the user and destroys the NProgressManager.
- Note that the NProgressManager destructor will automatically destroy the NProgress. It is imperative that the writing thread does not touch either the NProgress or the NProgressManager after calling NProgress::setFinished(), since once isFinished() returns
true
the reading thread might destroy the NProgressManager and thus the NProgress at any time. The writing thread cannot destroy these objects because it has no guarantee that the reading thread is not still reading progress reports from them.
- Deprecated:
- This class is deprecated. Please use the more flexible and more streamlined NProgressTracker class instead.
void regina::ShareableObject::writeTextLong |
( |
std::ostream & |
out | ) |
const |
|
inlinevirtualinherited |
Writes this object in long text format to the given output stream.
The output should provide the user with all the information they could want. The output should be human-readable, should not contain extremely long lines (so users can read the output in a terminal), and should end with a final newline.
The default implementation of this routine merely calls writeTextShort() and adds a newline.
- Python:
- The parameter out does not exist; standard output will be used.
- Parameters
-
out | the output stream to which to write. |
Reimplemented in regina::NSnapPeaTriangulation, regina::NGroupPresentation, regina::NHomMarkedAbelianGroup, regina::NNormalSurfaceList, regina::NTetrahedron, regina::NSatRegion, regina::NVertex, regina::NEdge, regina::Dim2Triangle, regina::NTriangle, regina::NLayeredSolidTorus, regina::NHomGroupPresentation, regina::NGenericIsomorphism< dim >, regina::NGenericIsomorphism< 2 >, regina::NGenericIsomorphism< 3 >, regina::NTriangulation, regina::NComponent, regina::NTxICore, regina::NTriSolidTorus, regina::NAngleStructureList, regina::Dim2Edge, regina::NBoundaryComponent, regina::NLayeredChain, regina::Dim2Vertex, regina::Dim2Component, regina::NScript, regina::NAugTriSolidTorus, regina::NSpiralSolidTorus, regina::NSurfaceFilterProperties, regina::NLayeredTorusBundle, regina::NManifold, regina::NPlugTriSolidTorus, regina::NMatrixInt, regina::NBlockedSFSTriple, regina::NPluggedTorusBundle, regina::Dim2Triangulation, regina::NSurfaceSubset, regina::NLayeredLensSpace, regina::NLayeredLoop, regina::NFileInfo, regina::NBlockedSFSLoop, regina::NSnappedBall, regina::NBlockedSFSPair, regina::Dim2BoundaryComponent, regina::NTrivialTri, regina::NL31Pillow, regina::NLayeredChainPair, regina::NText, regina::NSurfaceFilterCombination, and regina::NBlockedSFS.