For many years we have had the ability to expose Synergy data and logic through xfServerPlus which can be consumed, processed and displayed by cool Windows programs. But for me there has always been the “single thread” bottleneck. I’ve wanted my Windows applications to respond when the user drags the mouse, clicks a button, sorts a grid, at the time the event happens, and not when the program has caught up doing its background actions. Calling a remote method generally “hangs” the program until that operation has completed and this is because it’s being performed on the UI thread. And while the UI thread is busy calling into your xfServerPlus libraries and waiting for a response it blocks any user interaction so your application becomes unresponsive.
The answer is to utilize threads. Threads are separate processing channels that can run simultaneously. Your application always has at least one thread – the UI thread. But if you have a language that can allow multithreading then utilising this to perform background tasks on other threads frees your UI thread to continue being response to the user – its job really!
Welcome to Synergy.NET! Totally written in Synergy.NET and utilising the Symphony Framework I’ve written a fully functional interactive dashboard:
The user can fully define the record selection criteria and then issue the “Select” of the data. This selection is performed on a background thread. This means as the results are being returned from the remote Synergy DBMS file via xfServer the list is populated and the user can begin navigating the items within it. While the list is loading, the user can select an item even if the list load is not complete. At this point a number of background threads become active – each one loading data from different files via xfServer. The various lists are populated “in real time” and the application remains responsive – all the lists can be “loading” at the same time.
If the user clicks another item in the list the executing threads are instructed to “stop” and then the selection process restarts based on the newly selected master record.
Using the Symphony Framework and building my Synergy Repository based Data Objects using CodeGen I was able to quickly build the core components used in the Dashboard including the thread based selection code.
All this functionality is available in the latest V10.1 release of Synergy. To find out more details and to see multithreaded processing in action book your place at the upcoming DevPartner Conference at http://conference.synergex.com.