OmniThreadLibrary is a powerful threading library for Delphi. Currently, versions 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, and 10.3 Rio are supported. OmniThreadLibrary is an open source project. It lives on GitHub and is licensed under the BSD license.
This is not the first threading framework I’ve written. There are, however, few big differences between the OmniThreadLibrary and previous projects. All previous projects were closed source, used only for the in-house programming. They were all designed from the bottom. And they all had big problems when used in some real-life cases. Still, they were an important research tools. I learned a lot from them - what works, what doesn’t and, most important, what kind of threading issues are appearing in the real life applications.
At some point I’ve become unhappy with my previous frameworks and decided that it’s time for something better, something simpler. Something built from scratch. This time I didn’t start with the implementation but tried to visualize how I’d like to use my framework in real-life applications. After all, I had all those test cases lying around in form of my old applications using old framework. And so, the OmniThreadLibrary was born.
OmniThreadLibrary’s main “selling” points (besides the price, of course ;) are power, simplicity, and openess. With just few lines of code, you can set up multiple threads, send messages between them, process Windows messages and more. OmniThreadLibrary doesn’t limit you in any way - if it is not powerfull enough for you, you can ignore any part of its “smartness” and replace it with your own code. You can also ignore the threading part and use only the communication subsystem. Or vice versa. You’re the boss.
How to Start?
I would like to thank Gorazd Jernejc (also known as GJ) for his contribution to the OmniThreadLibrary project. Gorazd, OTL wouldn’t be the same without you!
OmniThreadLibrary would not be the same without the contributors (listed in alphabetical order):
ajasja, Alex Egorov, Alexander Alexeev, andi, Anton Alisov, arioch, Dean Hill, dottor_jeckill, geskill, Hallvard Vassbotn, HHasenack, Jamie, Lee Nover, M.J. Brandt, Mason Wheeler, Mayjest, meishier, morlic, Passella, Qmodem, ring.nic, Steve Maughan, Unspoken, Uwe Raabe, VyPu, Zarko.