Releases: gabr42/OmniThreadLibrary
Releases · gabr42/OmniThreadLibrary
OmniThreadLibrary 3.07.10
New features
- Thread name can be set for Parallel.TimedTask.
- Added Delphi 12 packages.
Bug fixes
- Parallel.Join makes sure that at least 1 task is active.
OmniThreadLibrary 3.07.9
-
New features:
- New unit OtlSync.Utils. Requires Delphi 2009 or newer.
- TOmniTaskControl.OnMessage and .OnTerminated free the executor if the eventHandler is nil.
- [HHasenack] Added IOmniTaskControl.DirectExecute which executes task in the current thread.
- [HHasenack] Added Cancel and IsCancelled to IOmniParallelTask.
- Implemented IOmniParallelJoin.Terminate and IOmniParallelTask.Terminate.
- Added optional timeout parameter to IOmniThreadPool.Cancel.
- Added Delphi 11 Alexandria packages.
-
Bug fixes:
- Fixed warnings in OtlComm.
- Fixed link to support forum in all units.
- Fixed TOmniMREW.TryEnterWriteLock [issue #149].
- Fixed: Calling TOmniWaitObjectList.Remove removed only the ResponseHandlers[] handler and not the AnonResponseHandlers[] handler.
- Fixed: IOmniIntegerSet/TOmniIntegerSet.AsMask changed to uint64 so it can store 64-bit NativeUInt without problems. [issue #148]
OmniThreadLibrary 3.07.8
-
New features:
- Implemented IOmniTask.RegisterWaitObject with an anonymous method callback.
- [Jacek Laskowski] donated a new OTL icon (res\OTL.ico).
- Added Delphi 10.4 Sydney packages.
-
Bug fixes:
- [sglienke] A reference to an anonymous method executor in IOmniTask is cleaned up as soon as possible. This allows OTL tasks to be executed from a package. [issue #132]
- TOmniMREW.TryEnterReadLock and .TryEnterWriteLock were returning True on timeout.
- SetOnMessage(nil) works correctly.
- Fixed invalid FreeAndNil of an interface in TOmniFuture.Execute.
- Compiles with Delphi 10.4 Sydney.
OmniThreadLibrary 3.07.7
- New features:
- [HHasenack] On XE3 and above, TOmniValue.CastTo supports casting to an interface.
- [HHasenack] Implemented Parallel.ForEach(IEnumerator) and Parallel.ForEach(IEnumerable).
- Bug fixes:
- If additional wait objects registered with RegisterWaitObject were constantly signalled, timers were never called.
- OtlParallel threads were incorrectly scheduled to the main pool instead of GlobalParallelPool unless IOmniTaskConfig.ThreadPool was used. (introduced in 3.07.6)
- Using Parallel.Join, .For, and .ForEach with .OnStopInvoke failed with access violation if Join/For/ForEach was not executed with .NoWait.
- Thread pool creation code waits for thread pool management thread to be started and initialized. Without that, CountQueued and CountExecuting may not be initialized correctly when thread pool creation code exits. [tnx to Roland Skinner]
OmniThreadLibrary 3.07.6
-
New features:
- Added Delphi 10.3 Rio packages.
- Implemented TOmniValue.LogValue.
- Implemented TOmniBlockingCollection.FromArray, .FromRange, and .AddRange. [issue #76]
- Added timeout parameter to TOmniMREW.TryEnterReadLock and TOmniMREW.TryExitReadLock.
-
Bug fixes:
- Fixed race condition in TOmniBaseBoundedQueue.RemoveLink which could cause TOmniBaseBoundedQueue.Enqueue to return False when queue was empty.
- Fixed race condition between TOmniResourceCount.[Try]Allocate and TOmniResourceCount.Release. [tnx to Stephen Melnyk]
- ThreadData is destroyed in the worker thread and not in the thread pool management thread.
- Reduced hints&warnings. [issue #110]
OmniThreadLibrary 3.07.5
- General improvements:
- Reduced number of times NameThreadForDebugging is called when threadpool
is used.
- Reduced number of times NameThreadForDebugging is called when threadpool
- Bug fixes:
- [VyPu] fixed race condition in TOmniCriticalSection.Release which affected
code that was using TOmniCriticalSection.LockCount. - OtlThreadPool did not respect OTL_DontSetThreadName define.
- [VyPu] fixed race condition in TOmniCriticalSection.Release which affected
OmniThreadLibrary 3.07.4
-
Bug fixes:
- TOmniEnumeratorProvider and TOmniValueEnumeratorProvider support dmoPreserveOrder option.
- Fixed 64-bit issues in DSiWin32, GpLists, GpStringHash, and GpStuff.
-
New features:
- Locked.Value is now both readable and writable property.
- Moved 'inline' functions around so that they will be inlined more often.
OmniThreadLibrary 3.07.3
-
Bug fixes:
- Nasty thread-unsafe condition fixed in DSiWin32's DSiTimeGetTime64, which is used all around OmniThreadLibrary to measure small time intervals.
-
New features:
- SetTimer accepts TProc and TProc timer methods.
- IOmniTask implements method InvokeOnSelf which can be used to schedule anonymous function execution from a task back to self.
OmniThreadLibrary 3.07.2
-
Potentially breaking change:
- Cancel(taskID) will signal task's cancellation token before calling task's Terminate
method. CancelAll will signal cancellation token for all running tasks before calling
their Terminate method.
Old behaviour (no CancellationToken.Signal before Terminate) can be achieved by
calling overloaded version of the functions accepting thesignalCancellationToken
parameter or by setting IOmniThreadPool.Options to [tpoPreventCancellationTokenOnCancel].
- Cancel(taskID) will signal task's cancellation token before calling task's Terminate
-
New features:
- Added OnStop overload that accepts 'reference to procedure (const task: IOmniTask)'
to Parallel.Join and Parallel.ParallelTask. - Added OnStopInvoke to all Parallel abstractions that implement OnStop method.
- IOmniParallelLoop.OnStopInvoke and IOmniParallelMapper<T1, T2> are only
available on XE7 and newer compilers.
- IOmniParallelLoop.OnStopInvoke and IOmniParallelMapper<T1, T2> are only
- Added IOmniTaskConfig.NoThreadPool. This allows high-level abstractions to
bypass thread pool entirely and run in 'non-pooled' threads. - TOmniCS.Initialize uses global lock to synchronize initialization instead of
a CAS operation. This fixes all reasons for the infamous error
"TOmniCS.Initialize: XXX is not properly aligned!".
- Added OnStop overload that accepts 'reference to procedure (const task: IOmniTask)'
-
Bug fixes:
-
Parallel.Future did not create task with the .Unobserved qualifier.
-
New demos:
- 66_ThreadsInThreads: Demonstrates how to manage OTL threads from other OTL threads
and from TThread threads.
- 66_ThreadsInThreads: Demonstrates how to manage OTL threads from other OTL threads
OmniThreadLibrary 3.07.1
New features
- Added support for Delphi 10.2 Tokyo.
Bug fixes
- Fixed long standing problem with timer processing in OtlTaskControl which could cause timers not to be triggered correctly and sometimes resulted in range check error.
- Fixed potential problem in TOTPWorker.Cancel.
- GParallelPool.IdleWorkerThreadTimeout_sec was incorrectly set to 60.000 seconds instead of 60 seconds.