Re: Someone changed my Thread Manager writeup?

new topic     » goto parent     » topic index » view thread      » older message » newer message

On Wed, 10 Aug 2005 07:10:31 -0700, Matt Lewis
<guest at RapidEuphoria.com> wrote:

<snip>
I have to agree with Matt on this. The main thing I would say here is
that if Rob offers something like this in 2.6, I'll not be happy. I
certainly don't want him to start thinking that now Al Getz's "Thread
Manager" is in the archives, I don't have to bother.

>Al Getz wrote:
>BTW, what single word name would you use to describe these pseudo 'threads'?
"Background task manager", basically a time()-based wrapper around
doEvents() (or the WinClass equivalent). Multiple background tasks can
be started, but the last one started must complete before any previous
can resume. In particular, blocked I/O (still) stalls the entire app.

>It does in fact use:
>"Preemptive Multitasking"
>ie uses some criteria to decide how long any one task should run 
>before giving another task a turn to use the operating system.
No, it does not. At best you might claim it is "Dualtasking", between
the top of the background task stack and the GUI message loop, but
*Multi* tasking is just downright misleading.

>I guess i could add a scheduling mechanism if that would make more
>people happy :)
I'd be very surprised if you could.

>I really think you should try a few applications using this kind of
>technique before you pass judgement.  
I don't need to, since I already know how to call doEvents() blink)

>Note that if thread 2 is almost done when thread 3 is initiated,
>after thread 3 is complete thread 2 completes rather quickly
>because it's almost done.
Which begs the question: Why bother with a stack of time() values?
Why not just have a single atom?

Some other notes:
There should be a built-in single procedure call for:
if CheckThread() then
        if QueryQuitMessage(0) then
        end if
        ContinueThread(TimeSlice)
      end if

rather than having to code the whole of that in every task loop.

Here is the win32lib equivalent:
atom TimeSlice
atom EndSlice

global procedure StartThread(atom t)
    TimeSlice = t
    EndSlice=time()+TimeSlice
end procedure

global procedure CheckThread()
  if time()>EndSlice then
    EndSlice=time()+TimeSlice
    doEvents(0)
  end if
end procedure


Regards,
Pete

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu