Over time, we realized it would be better to focus on the things that made OF unique rather than re-inventing and debugging the same low-level features. The options were Poco or Boost, and we went with Poco because it felt more approachable. In the last few years, C++11, a new version of C++ has become widely adopted, and many of its features have come from Boost. This means now we can replace some Poco code with standard functions, and OF can go back to being "less complicated". For things that aren't standardized yet, we've replaced Poco with Boost to make it easy to transition when those Boost features are eventually adopted. The Poco libraries still come packaged with OF to retain backwards compatibility for anybody who is using the Poco libraries directly.
Instead of sharing both the data that needs to be processed and the result between the 2 threads and accessing it using mutexes to avoid race conditions, now we'll send the data that needs to be processed from the main thread to an auxiliary or worker thread through a channel and the result back to the main thread through a different channel.
Channels are thread safe so all this happens without having to lock at all. Additionally the worker thread can sleep until there's data to be processed by calling ofThreadChannel::receive which will use 0% CPU while there's no data to process and only wake up when there's something to do.