02-11-2019, 07:07 AM
Improved version. Previous version does not work well when the main macro started again while some old threads are still not ended. Also now is used class instead of atend.
Macro MKV
Macro __SemaphoreReleaser
Member function SemaphoreReleaser.
Note: it is Member function, and its name ends with period.
Macro MKV
out
;create list of files for testing
ARRAY(str) af; GetFilesInFolder af "q:\test"
str files=af
;==========================================================================================
__Handle+ g_sem2257; lock() if(g_sem2257=0) int nThreads=4; g_sem2257=CreateSemaphore(0 nThreads nThreads 0)
str f
foreach f files
,wait 0 H g_sem2257
,mac("sub.Convert" "" f)
#sub Convert
function $f
#compile "__SemaphoreReleaser"
SemaphoreReleaser semRel=g_sem2257
;thread code for testing
MES m.timeout=RandomInt(1 3); m.x=RandomInt(1 1000)
mes f "Convert" m
Macro __SemaphoreReleaser
Member function SemaphoreReleaser.
Note: it is Member function, and its name ends with period.