@@ -150,15 +150,13 @@ proc submitTask*(manager: TaskManager, delay: Duration, task: Task, repeatTask =
150150 if not isPositiveDuration (delay):
151151 manager.pending.addLast (task)
152152 return
153-
154- let scheduleTask = ScheduledTask (
153+
154+ manager.scheduled. add ( ScheduledTask (
155155 dueAt: getTime () + delay,
156156 task: task,
157157 repeating: repeatTask,
158158 repeatEvery: initDuration ()
159- )
160-
161- manager.scheduled.add (scheduleTask)
159+ ))
162160
163161 echo " Scheduled task '#" , task.id, " ' to run in " , beautifyDuration (delay)
164162
@@ -187,7 +185,10 @@ proc submitRepeatingTask*(manager: TaskManager, every: Duration, task: Task,
187185 repeating: true ,
188186 repeatEvery: every
189187 ))
190- true
188+
189+ echo " Scheduled task '#" , task.id, " ' to run in " , beautifyDuration (every)
190+
191+ result = true
191192
192193proc run * (manager: TaskManager ) =
193194 # # Starts the event loop to process tasks. This will block until the
@@ -240,3 +241,31 @@ proc halt*(manager: TaskManager, delay: Duration): bool =
240241 tv.tv_usec = clong ((delay.inMilliseconds mod 1000 ) * 1000 )
241242 result = event_base_loopexit (manager.base, addr tv) == 0
242243
244+ when isMainModule :
245+ import std/ os
246+ var manager = newTaskManager (tickMs = 10 )
247+
248+ discard manager.submitTask (Task (
249+ id: " task1" ,
250+ work: proc () =
251+ echo " Hello from task1"
252+ while true :
253+ sleep (1000 ) # Simulate long-running task
254+ ))
255+
256+ manager.submitTask (
257+ initDuration (days = 2 ),
258+ Task (id: " once-after-2-days" , work: proc () = echo " run once" )
259+ )
260+
261+ echo manager.submitRepeatingTask (
262+ every = initDuration (minutes = 2 ),
263+ task = Task (id: " repeat-2-days" ,
264+ work: proc () =
265+ echo " This runs every 2 minutes"
266+ )
267+ )
268+
269+ # discard manager.halt(initDuration(milliseconds = 5000)) # Stop the manager after 5 seconds
270+ manager.run ()
271+ manager.close ()
0 commit comments