Code:
Global ghWnd_Scheduler& Global Abort_Scheduler& Global gThread_Suspend&() Global gThread_Running&() %AddThread = %WM_APP + 1 %RemoveThread = %WM_APP + 2 %FreeThreads = %WM_APP + 3 Function WindowThread(ByVal x&)As Long 'create a modal scheduler-window Local WinCnt& Dialog New %HWND_DESKTOP,"",0,0,0,0 TO ghWnd_Sheduler& Dialog Show State ghWnd_Sheduler&,%SW_HIDE Dialog Show ModeLess ghWnd_Sheduler& Call DLGPROC_SCHEDULER Do Dialog DoEvents To WinCnt& If Abort_Scheduler <> 0 Then Dialog End ghWnd_Sheduler& Loop While WinCnt& > 0 End Function CallBack Function DLGPROC_SCHEDULER Local Nr&,Nr1&,Rc& Select Case CBMsg Case %WM_INITDIALOG ReDim gThread_Suspended&(1 To 100) ReDim gThread_Running&(1 To 10) Case %AddThread Array Scan gThread_Running(),= 0, To Nr& If Nr& <> 0 Then gThread_Running&(Nr&) = CBwParam Thread Resume CBwParam TO rc& Else Array Scan gThread_Suspended&(),=0, To Nr& If Nr& = 0 Then 'Fatal Error, more than 100 requests gThread_Suspended&(Nr&) = CBwParam End if Case %RemoveThread Array Scan gThread_Running&(), =CBwParam, To Nr& If Nr& = 0 Then 'Something is wrong here Thread Close gTread_Running&(Nr&) To rc& gThread_Running&(Nr&) = 0 Array Scan gThread_Suspended&(),<>0, To Nr1& If Nr1& <> 0 Then Swap gThread_Running&(Nr&), gThread_Suspended&(Nr1&) Thread Resume gThread_Running&(Nr&) TO rc& End if Case %FreeThreads Nr2& = 0 For Nr& = 1 to 100 If gThread_Suspended&(Nr&)=0 then incr Nr2& Next Function = Nr& End Select End Function '--When you create a new workerthread---------------- Dialog Send ghWnd_Scheduler&,%FreeThread,0,0 To ThreadCnt& If ThreadCnt& > 0 then Thread Create Worker(Parameter) Suspend To ThreadId& If ThreadId& <> %NULL Then Dialog Send ghWnd_Scheduler&,%AddThread,ThreadId&,0 End If End If .... '--In your worker thread, when it is about to end---- Dialog Send ghWnd_Scheduler&,%RemoveThread,GetCurrentThreadId(),0
app is terminating etc.
------------------
Fred
mailto:[email protected][email protected]</A>
http://www.oxenby.se
[This message has been edited by Fred Oxenby (edited January 10, 2001).]
Leave a comment: