OmniThreadLibrary Changelog

What's new in OmniThreadLibrary 3.0

Feb 17, 2012
  • New features
  • Support for 64-bit platform. Great thanks to GJ for doing most of the work!
  • Implemented background worker abstraction, Parallel.BackgroundWorker.
  • Implemented Atomic class for lock-free initialization of interfaces and objects.
  • Implemented Locked class for locking intialization of practically anything.
  • TOmniValue.AsInteger, AsString and AsWideString now work if the TOmniValue contains a Variant of the apropriate type.
  • TOmniValue can store arrays, hashes and records. Variant arrays are no longer used. IsArray tests it TOmniValue contains an array and AsArray returns this internal container. Default indexed property still accesses individual elements in this container. See demo 50_OmniValueArray for an example.
  • Added a class which can wrap any record - TOmniRecordWrapper.
  • Added an interface which can wrap any object and destroy it when the interface goes out of scope - IOmniAutoDestroyObject.
  • Bug fixes:
  • Fixed bugs in TOmniInterfaceDictionary which caused scheduled tasks not to be destroyed until the program was terminated. Great thanks to Zarko for providing a reproducible test case
  • Fixed race condition between TOmniTask.Execute and TOmniTask.Terminate
  • Under some circumstances ProcessMessage failed to rebuild handle array before waiting which could cause 'invalid handle' error
  • Fixed wrong order in teardown sequence in TOmniTask.Execute which could cause access violation crash. Great thanks to Alisov for providing a reproducible test case
  • Fixed invalid "A call to an OS function failed" error in DispatchEvent
  • TOmniMessageQueue.Enqueue leaked if queue was full and value contained reference counted value (found by meishier)
  • Number of producers/consumers in TOmniForkJoin.StartWorkerTasks was off by 1 (found by meishier)
  • New demos:
  • 49_FramedWorkers: Multiple frames communication with each own worker task
  • 50_OmniValueArray: Wrapping arrays, hashes and records in TOmniValue
  • 51_PipelineStressTest: Stress test by Alisov
  • 52_BackgrondWorker: Demo for the new Parallel.BackgroundWorker abstraction