In my WIP pdlua scripting library https://github.com/sebshader/lscore
I use 1 clock from pdlua for timing but then use my own heap/priority-queue-based scheduler as a wrapper for it.
So if I need a new delay/clock I add it to my own scheduling queue, and then the priority queue pops the (next time - current time) for the underlying t_clock that pdlua uses every time a delay occurs.
(and then the clocks are used for delays within coroutine yields so you can write music)
In my case I also need a lot more manipulations of the scheduling queues though (my next project is to have 1 scheduling queue per
accelerando/ritardando group so a tree of descendants of an ancestor coroutine that sprouted them can accelerando/ritardando together)

-Seb

-----Original Message-----

Date: Sun, 6 Jun 2021 18:52:17 -0700
From: Miller Puckette <msp@ucsd.edu>
To: Iain Duncan <iainduncanlists@gmail.com>
Cc: pd-dev <pd-dev@lists.iem.at>
Subject: Re: [PD-dev] Creating delayed functions in Pd external?
Message-ID: <20210607015217.4fb2ym5rl27d7olu@ucsd.edu>
Content-Type: text/plain; charset=us-ascii

Well, Pd's own scheduler for clocks keeps them in a linked list and chases
down it to set and unset them.  So if you did anything smart for the
scheme callbacks Pd would see to it that it's still linear time in the
number of active callbacks.

cheers
M

On Sun, Jun 06, 2021 at 06:22:41PM -0700, Iain Duncan wrote:
> Thanks Miller. That brings up one more question.. ;-)
>
> In Scheme for Max, the way I do it is I keep a hash-table in C going
> with keys that are created on Scheme delay calls, so that one can cancel
> clocks by fetching them from the hashtable. In Max, there's a
> cross-platform hash-table implementation that I'm using. Is there something
> similar for Pd, or if not, is there an approach you would recommend for
> keeping a key-value store in C for the clocks by a symbolic key? I guess a
> good question might be if this is even necessary, given there can't be
> *that* many clocks scheduled for the future. And association list type
> thing might do just as well.
>
> thanks for the help, it's going well, now that I can finally work on it!
> ought to have a first alpha folks can play with in the next couple of weeks.
> iain
>
>
>
> On Sun, Jun 6, 2021 at 5:36 PM Miller Puckette <msp@ucsd.edu> wrote:
>
> > clock() is the only mechanism - for repeats, the easiest thing is often
> > to just re-use a clock() and re-set it each time it goes off (as in
> > the metro obejct).  You can indeed create clock obejcts on the fly -
> > that's what pipe does.  But you'll want to keep track of them so you can
> > cancel them if the owning object goes away.
> >
> > cheers
> > M
> >
> > On Sun, Jun 06, 2021 at 05:16:09PM -0700, Iain Duncan wrote:
> > > Ah fantastic, thanks. I was looking in pipe and not seeing it, but was
> > > probably just lost in other new details and not seeing the forest for the
> > > trees. :-)
> > >
> > > Couple of follow ups:
> > > - is there a separate facility for making a repeated callback (ie not
> > > one-shot), or does one just do both with clock?
> > > - is it safe to make clocks as we need them (ie during a method call, not
> > > necessarily at object instantiation time), or is this the kind of thing
> > > where for real time use one needs to make a clock pool and a pool manager
> > > and all that?
> > >
> > > thanks!
> > > iain
> > >
> > > On Sun, Jun 6, 2021 at 5:12 PM Miller Puckette <msp@ucsd.edu> wrote:
> > >
> > > > Yep, clock_delay() .  Simples example is in Pd's "delay" object,
> > x_time.c
> > > >
> > > > cheers
> > > > Miller
> > > >
> > > > On Sun, Jun 06, 2021 at 04:21:46PM -0700, Iain Duncan wrote:
> > > > > Hi folks, I'm hoping someone can point me in the right direction
> > here.
> > > > I'm
> > > > > porting Scheme for Max to pure data and I'm stuck figuring out how
> > to get
> > > > > delayed functions going. In Max, the SDK has a facility to make
> > register
> > > > a
> > > > > callback to executed at some point in the future, a few different
> > ways.
> > > > Is
> > > > > there a Pd equivalent, and if so, could anyone point me at resources
> > or
> > > > > code for it?  I basically just need to be able to have a callback
> > fire
> > > > off
> > > > > at the right time with one argument, which can be void pointer to the
> > > > rest
> > > > > of the stuff i want to get.
> > > > >
> > > > > thanks!
> > > > > iain
> > > >
> > > > > _______________________________________________
> > > > > Pd-dev mailing list
> > > > > Pd-dev@lists.iem.at
> > > > >
> > > >
> > https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.puredata.info_listinfo_pd-2Ddev&d=DwICAg&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=uekrR-wLMB9CDNku0beRkRmoSJoExinRbBSlb0UQknQ&s=98jkGlO1FFE0Ea5fhSopCbZt6bmZH580Y0IUfgX4Rwk&e=
> > > >
> > > >
> > > > --
> > > >
> >
> > --
> >

--





------------------------------

Subject: Digest Footer

_______________________________________________
Pd-dev mailing list
Pd-dev@lists.iem.at
https://lists.puredata.info/listinfo/pd-dev


------------------------------

End of Pd-dev Digest, Vol 194, Issue 4
**************************************