@Override
		public void taskEnded(long id, I Item, long total, long progress) {
			if (!jobsReportProgress) {
				//
				// This code works in 2 ways.  The default case is that clients place items on
				// the queue.  As the amount of work grows, so too does the max progress value.
				// This obviates the need for clients to manage progress.  (The downside to this
				// is that the progress may keep getting pushed back as it approaches the
				// current maximum value.)  The second case is where the client has specified a
				// true maximum value.  In that case, this code will not change the maximum
				// (assuming that the client does not put more items into the queue than they
				// specified).
				//
				if (total > monitor.getMaximum()) {
					monitor.setMaximum(total);
				}
				monitor.setProgress(progress);
			}
		}
Simple connector for traditional TaskMonitor and a task from the ConcurrentQ.  This adapter
adds a cancel listener to the TaskMonitor and when cancelled is called on the monitor,
it cancels the currently running (scheduled on the thread pool) and leaves the waiting
tasks alone.  It also implements a QProgressListener and adds itself to the concurrentQ so
that it gets progress events and messages and sets them on the task monitor.
Ghidra/Framework/Generic/src/main/java/generic/concurrent/ConcurrentQ.java