[PD-cvs] externals/grh/threadlib/doc help-detach.pd, NONE, 1.1 help-join.pd, NONE, 1.1 help-sleep.pd, NONE, 1.1 help-threadedsf.pd, NONE, 1.1

Georg Holzmann grholzi at users.sourceforge.net
Mon Nov 14 22:06:06 CET 2005


Update of /cvsroot/pure-data/externals/grh/threadlib/doc
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27977

Added Files:
	help-detach.pd help-join.pd help-sleep.pd help-threadedsf.pd 
Log Message:
initial commit


--- NEW FILE: help-join.pd ---
#N canvas 280 37 480 847 10;
#X obj 29 23 cnv 15 404 54 empty empty empty 22 25 0 18 -1 -66577 0
;
#X obj 31 25 cnv 15 400 50 empty empty threadlib 22 25 0 18 -228992
-66577 0;
#X text 322 34 help file of;
#X text 39 783 =%)!(%= threadlib \, by Georg Holzmann <grh at mur.at>
\, 2005;
#X text 82 817 htttp://grh.mur.at/software/threadlib.html;
#X obj 232 717 sleep;
#X obj 281 717 threadedsf;
#X text 95 717 see also:;
#X text 163 324 see the examples:;
#X text 154 407 !!!!! WARNING !!!!!;
#X text 30 436 detach/join provide the possibility of threaded patching
\, beware of the risks:;
#X text 30 466 - not every pd object is thread-safe (if unsure \, look
at the source \, ask the pd-list or me);
#X text 31 497 - pd is not completely thread-safe itself;
#X text 31 516 - everything that is triggered by the detached message
will be detached - so don't mix threaded and non-threaded message paths
unless you know what you are doing. use join to synchronize with the
main pd thread !;
#X text 31 575 - if detach/join crashes pd during a performance \,
don't complain ...;
#X text 31 607 - both detach and join have an overhead ... so only
use them if you really need threaded patching \, e.g. have a subpatch
that has to run for quite some time and would interrupt audio or something
else;
#X text 67 800 heavily based on pd_devel code by Tim Blechmann;
#N canvas 421 0 803 576 detach_join_examples 0;
#X msg 117 105 5;
#X obj 117 133 sleep;
#X text 37 39 1) this will block the system for 5 sec:;
#X obj 117 161 print EX1_DONE;
#X text 554 112 (instead of sleep you could;
#X msg 499 73 5;
#X obj 499 123 sleep;
#X text 396 39 2) to avoid this you can run it in a helper thread:
;
#X obj 499 97 detach;
#X obj 499 184 print EX2_DONE;
#X text 560 127 of course use an other cpu;
#X text 559 143 intensive object which could;
#X text 561 158 block the main thread);
#X text 34 252 3) be aware that each object connected to;
#X text 55 267 detach will run in the helper thread:;
#X msg 127 305 5;
#X obj 127 366 sleep;
#X obj 127 330 detach;
#X obj 170 397 print EX3_DONE_1;
#X msg 127 396 5;
#X obj 127 433 sleep;
#X obj 127 514 print EX3_DONE_2;
#X text 179 436 <- also in helper thread;
#X text 164 457 (and anything else connected;
#X text 171 472 to objects which are connected;
#X text 172 487 to detach !);
#X text 392 251 4) to synchronize these objects with pd main thread
;
#X text 413 268 again you have to use the join object:;
#X text 58 56 (so you will get e.g. an 5 sec;
#X text 61 71 audio drop out !);
#X msg 503 303 5;
#X obj 503 364 sleep;
#X obj 503 328 detach;
#X msg 503 394 5;
#X obj 546 395 print EX4_DONE_1;
#X text 579 368 <- in helper thread;
#X obj 503 431 join;
#X obj 503 463 sleep;
#X obj 503 518 print EX4_DONE_2;
#X text 551 464 <- in main thread again;
#X text 551 481 (and will so block the system);
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 5 0 8 0;
#X connect 6 0 9 0;
#X connect 8 0 6 0;
#X connect 15 0 17 0;
#X connect 16 0 18 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 30 0 32 0;
#X connect 31 0 33 0;
#X connect 31 0 34 0;
#X connect 32 0 31 0;
#X connect 33 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X restore 141 343 pd detach_join_examples;
#X text 321 50 ::: join :::;
#X text 176 109 ::: JOIN :::;
#X obj 175 717 detach;
#X text 31 150 Join synchronizes messages from all threads to the pd
main thread. The message to the inlet will be sent to the outlet during
the next clock callback of the scheduler. It doesn't matter \, which
thread the message was coming from. Messages from the main pd thread
will be rescheduled.;
#X text 30 217 Join can be used everywhere \, where a message has to
be rescheduled \, this is also useful to place behind any threaded
external calling the outlet function from a helper thread - so you
can be sure \, that the following messages are being run in the main
pd thread.;

--- NEW FILE: help-detach.pd ---
#N canvas 658 0 480 847 10;
#X obj 29 23 cnv 15 404 54 empty empty empty 22 25 0 18 -1 -66577 0
;
#X obj 31 25 cnv 15 400 50 empty empty threadlib 22 25 0 18 -228992
-66577 0;
#X text 322 34 help file of;
#X text 316 50 ::: detach :::;
#X text 39 783 =%)!(%= threadlib \, by Georg Holzmann <grh at mur.at>
\, 2005;
#X text 82 817 htttp://grh.mur.at/software/threadlib.html;
#X text 29 150 Detach is working on control objects only \, creates
a helper thread and runs all functions of the following object in this
helper thread.;
#X text 27 194 If a message form that thread reaches a join object
a callback for running the outlet function will be placed in the scheduler
and run in the next scheduler loop - so you can synchronize the message
with pd's main thread again.;
#X text 173 110 ::: DETACH :::;
#X text 28 251 Detach is useful \, if you have a control operation
that would be too CPU-intensive and would disturb dsp.;
#X obj 223 717 sleep;
#X obj 178 717 join;
#X obj 273 717 threadedsf;
#X text 98 717 see also:;
#X text 163 324 see the examples:;
#X text 154 407 !!!!! WARNING !!!!!;
#X text 30 436 detach/join provide the possibility of threaded patching
\, beware of the risks:;
#X text 30 466 - not every pd object is thread-safe (if unsure \, look
at the source \, ask the pd-list or me);
#X text 31 497 - pd is not completely thread-safe itself;
#X text 31 516 - everything that is triggered by the detached message
will be detached - so don't mix threaded and non-threaded message paths
unless you know what you are doing. use join to synchronize with the
main pd thread !;
#X text 31 575 - if detach/join crashes pd during a performance \,
don't complain ...;
#X text 31 607 - both detach and join have an overhead ... so only
use them if you really need threaded patching \, e.g. have a subpatch
that has to run for quite some time and would interrupt audio or something
else;
#X text 67 800 heavily based on pd_devel code by Tim Blechmann;
#N canvas 421 0 803 576 detach_join_examples 0;
#X msg 117 105 5;
#X obj 117 133 sleep;
#X text 37 39 1) this will block the system for 5 sec:;
#X obj 117 161 print EX1_DONE;
#X text 554 112 (instead of sleep you could;
#X msg 499 73 5;
#X obj 499 123 sleep;
#X text 396 39 2) to avoid this you can run it in a helper thread:
;
#X obj 499 97 detach;
#X obj 499 184 print EX2_DONE;
#X text 560 127 of course use an other cpu;
#X text 559 143 intensive object which could;
#X text 561 158 block the main thread);
#X text 34 252 3) be aware that each object connected to;
#X text 55 267 detach will run in the helper thread:;
#X msg 127 305 5;
#X obj 127 366 sleep;
#X obj 127 330 detach;
#X obj 170 397 print EX3_DONE_1;
#X msg 127 396 5;
#X obj 127 433 sleep;
#X obj 127 514 print EX3_DONE_2;
#X text 179 436 <- also in helper thread;
#X text 164 457 (and anything else connected;
#X text 171 472 to objects which are connected;
#X text 172 487 to detach !);
#X text 392 251 4) to synchronize these objects with pd main thread
;
#X text 413 268 again you have to use the join object:;
#X text 58 56 (so you will get e.g. an 5 sec;
#X text 61 71 audio drop out !);
#X msg 503 303 5;
#X obj 503 364 sleep;
#X obj 503 328 detach;
#X msg 503 394 5;
#X obj 546 395 print EX4_DONE_1;
#X text 579 368 <- in helper thread;
#X obj 503 431 join;
#X obj 503 463 sleep;
#X obj 503 518 print EX4_DONE_2;
#X text 551 464 <- in main thread again;
#X text 551 481 (and will so block the system);
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 5 0 8 0;
#X connect 6 0 9 0;
#X connect 8 0 6 0;
#X connect 15 0 17 0;
#X connect 16 0 18 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 30 0 32 0;
#X connect 31 0 33 0;
#X connect 31 0 34 0;
#X connect 32 0 31 0;
#X connect 33 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X restore 141 343 pd detach_join_examples;

--- NEW FILE: help-sleep.pd ---
#N canvas 280 37 465 589 10;
#X obj 29 23 cnv 15 404 54 empty empty empty 22 25 0 18 -1 -66577 0
;
#X obj 31 25 cnv 15 400 50 empty empty threadlib 22 25 0 18 -228992
-66577 0;
#X text 322 34 help file of;
#X text 27 518 =%)!(%= threadlib \, by Georg Holzmann <grh at mur.at>
\, 2005;
#X text 70 552 htttp://grh.mur.at/software/threadlib.html;
#X obj 261 452 threadedsf;
#X text 83 452 see also:;
#X text 55 535 heavily based on pd_devel code by Tim Blechmann;
#N canvas 421 0 803 576 detach_join_examples 0;
#X msg 117 105 5;
#X obj 117 133 sleep;
#X text 37 39 1) this will block the system for 5 sec:;
#X obj 117 161 print EX1_DONE;
#X text 554 112 (instead of sleep you could;
#X msg 499 73 5;
#X obj 499 123 sleep;
#X text 396 39 2) to avoid this you can run it in a helper thread:
;
#X obj 499 97 detach;
#X obj 499 184 print EX2_DONE;
#X text 560 127 of course use an other cpu;
#X text 559 143 intensive object which could;
#X text 561 158 block the main thread);
#X text 34 252 3) be aware that each object connected to;
#X text 55 267 detach will run in the helper thread:;
#X msg 127 305 5;
#X obj 127 366 sleep;
#X obj 127 330 detach;
#X obj 170 397 print EX3_DONE_1;
#X msg 127 396 5;
#X obj 127 433 sleep;
#X obj 127 514 print EX3_DONE_2;
#X text 179 436 <- also in helper thread;
#X text 164 457 (and anything else connected;
#X text 171 472 to objects which are connected;
#X text 172 487 to detach !);
#X text 392 251 4) to synchronize these objects with pd main thread
;
#X text 413 268 again you have to use the join object:;
#X text 58 56 (so you will get e.g. an 5 sec;
#X text 61 71 audio drop out !);
#X msg 503 303 5;
#X obj 503 364 sleep;
#X obj 503 328 detach;
#X msg 503 394 5;
#X obj 546 395 print EX4_DONE_1;
#X text 579 368 <- in helper thread;
#X obj 503 431 join;
#X obj 503 463 sleep;
#X obj 503 518 print EX4_DONE_2;
#X text 551 464 <- in main thread again;
#X text 551 481 (and will so block the system);
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 5 0 8 0;
#X connect 6 0 9 0;
#X connect 8 0 6 0;
#X connect 15 0 17 0;
#X connect 16 0 18 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 30 0 32 0;
#X connect 31 0 33 0;
#X connect 31 0 34 0;
#X connect 32 0 31 0;
#X connect 33 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X restore 135 372 pd detach_join_examples;
#X obj 163 452 detach;
#X text 319 50 ::: sleep :::;
#X text 176 109 ::: SLEEP :::;
#X text 31 149 Sleep simply uses the c-function sleep() and blocks
the system for a specific time.;
#X obj 122 256 sleep;
#X msg 122 226 5;
#X text 159 227 <- sleep time in seconds !;
#X obj 122 287 print SLEEP_OVER;
#X text 154 353 see more examples:;
#X obj 220 452 join;
#X connect 13 0 16 0;
#X connect 14 0 13 0;

--- NEW FILE: help-threadedsf.pd ---
#N canvas 728 33 465 834 10;
#X obj 29 23 cnv 15 404 54 empty empty empty 22 25 0 18 -1 -66577 0
;
#X obj 31 25 cnv 15 400 50 empty empty threadlib 22 25 0 18 -228992
-66577 0;
#X text 314 35 help file of;
#X text 27 765 =%)!(%= threadlib \, by Georg Holzmann <grh at mur.at>
\, 2005;
#X text 70 799 htttp://grh.mur.at/software/threadlib.html;
#X text 100 711 see also:;
#X text 55 782 heavily based on pd_devel code by Tim Blechmann;
#X obj 180 711 detach;
#X obj 237 711 join;
#X text 292 51 ::: threadedsf :::;
#X text 162 112 ::: THREADEDSF :::;
#X text 106 152 A threaded soundfiler for main pd.;
#X obj 274 191 soundfiler;
#X obj 278 711 sleep;
#X text 27 594 NOTE: this is the threaded soundfiler from pd devel
0.38 by Tim Blechmann \, adapted to work with main pd >= 0.39. Instead
of the idle callbacks \, which are not really useable in current main
pd \, it uses clock-callbacks (ans also the lockfree FIFO of pd devel).
;
#X obj 70 512 threadedsf;
#X obj 70 534 print THREADED_SF;
#X obj 70 489 r \$0-tsf;
#X text 101 191 USAGE: see help-file of;
#X text 148 207 (same usage);
#X obj 52 307 openpanel;
#X msg 52 329 read -resize \$1 array1;
#X obj 52 351 s \$0-tsf;
#X obj 52 287 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 248 349 s \$0-tsf;
#X obj 248 285 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 248 327 write -wave \$1 array1;
#X obj 248 305 savepanel;
#X obj 265 505 table array1;
#X text 48 255 the same as with soundfiler:;
#X text 73 286 <- read;
#X text 271 284 <- write;
#X obj 262 437 s \$0-tsf;
#X text 46 409 additional: threaded resize->;
#X msg 262 411 resize array1 4410;
#X connect 15 0 16 0;
#X connect 17 0 15 0;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X connect 23 0 20 0;
#X connect 25 0 27 0;
#X connect 26 0 24 0;
#X connect 27 0 26 0;
#X connect 34 0 32 0;





More information about the Pd-cvs mailing list