Simple Thread - One Main, One Secondary

Category: Threads

Date: 02-16-2022

Return to Index


 
'The whole point of a thread is to allow 2 or more sections of code to run
'in parallel.  This is particularly useful when intensive calculations (usually
'in loops) need to be made in the background - allowing the user to continue
'to operate an application while the background processing takes place.
 
'When a thread is created, using "Thread Create", it directs Windows to
'run a specific function. When that function completes, the thread ends.
 
'Like any function, the thread function can call other functions. But eventually
'execution returns to the thread, the function ends, and the thread ends.
 
'A thread has both a thread ID and a thread handle.  The thread handle
'is used with the various PowerBASIC thread statements.  The thread ID
'(from the THREADID statement) is used with more advanced thread-related API.
 
'There are no messages sent by Windows when a thread is created/closed,
'but see http://gbl_00349 for information on generating custom thread messages.
 
'Primary Code:
'There are 2 basic pieces to the puzzle:
'Create a thread Function to run as the thread
Thread Function NewThread (ByVal x As LongAs Long
'... thread code goes here
End Function
 
'Create the thread
Thread Create NewThread(0) To hThread
 
'Compilable Example:  (Jose Includes)
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
%Unicode=1
#Include "Win32API.inc"
Global hDlg as DWordhThread as DWord
Global iCountA&, iCountB&
 
Function PBMain() As Long
   Dialog New Pixels, 0, "Test Code",300,300,200,200, %WS_OverlappedWindow To hDlg
   Control Add Button, hDlg, 100,"Start Thread", 50,10,100,20
   Control Add Label, hDlg, 200,"<main thread count>", 50,40,100,20
   Control Add Label, hDlg, 300,"<extra thread count>", 50,70,100,20
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   If CB.Msg = %WM_Command AND CB.Ctl = 100 AND CB.Ctlmsg = %BN_Clicked Then
      Thread Create NewThread(0) To hThread       'start the new thread, argument not used
      Thread Close hThread To hThread    'suggested by PowerBASIC Inc. as good practice
      MainThread    'in the main thread, keep doing something
      Control Set Text hDlg, 200, "Main" + Str$(iCountA&)
      Control Set Text hDlg, 300, "Not-Main" + Str$(iCountB&)
   End If
End Function
 
Function MainThread () As Long
   Do
      Incr iCountA&
   Loop Until iCountA& > 20000000
End Function
 
Thread Function NewThread (ByVal x As LongAs Long
   Do
      Incr iCountB&
   Loop Until iCountB& > 2000
End Function
 
'gbs_00336


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm