On 2013-11-21, at 15:56, Yuriy Tymchuk <yuriy.tymchuk@me.com> wrote:
On 20 Nov 2013, at 20:58, Clément Bera <bera.clement@gmail.com> wrote:
So what you are looking for is Process and semaphores.
This is not multithreading in the default Pharo VM + image, currently our semaphore/process management is not multithreaded, but executes all the process in the same thread. What happens basically is that you will run several processes in 1 thread with different priorities, and processes with highest priorities will be executed first. This is very good for your case, because if you put your task in another process with lower priority than the UI process, each time you will trigger a UI interaction the secondary process will be temporarily stopped to execute your UI interaction.
(see #forkAt: Process userBackgroundPriority)
One more thing: how do I synchronise? For example I want two async processes, but when they both finish I want to execute something. Eg. return merged data generated by processes.
Semaphores are your friends: semaphore := Semaphore new. [ ... First Job ... semaphore signal. ] fork. [ ... Second Job ... semaphore signal. ] fork. "consume to signals, aka. pause this thread until both jobs have finished" semaphore wait; wait.