CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Jul 2001
    Location
    Mumbai,India
    Posts
    382

    CreateThread function

    Hi,

    Does anyone know how to use the CreateThread() API
    in VB.
    I'm trying to use it in my prog. to perform two simultaneous tasks, but it is resulting in a lot
    of access violations.

    Can anyone help me?

    Thanks in advance.
    The Beret.


  2. #2
    Join Date
    Oct 2001
    Location
    India
    Posts
    16

    Re: CreateThread function

    place the below codings in to a class module and impliment your application using that..
    'API Declarations
    'Creates a new thread
    Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
    'Terminates a thread
    Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
    'Sets the priority of a thread
    Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
    'Returns the proirity of a thread
    Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
    'Enables a disabled Thread
    Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
    'Disables a thread
    Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
    'Returns the handle of the current thread
    Private Declare Function GetCurrentThread Lib "kernel32" () As Long
    'Returns the ID of the current thread
    Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

    'Consts
    Private Const MAXLONG = &H7FFFFFFF

    'Thread priority consts
    Private Const THREAD_BASE_PRIORITY_IDLE = -15
    Private Const THREAD_BASE_PRIORITY_LOWRT = 15
    Private Const THREAD_BASE_PRIORITY_MAX = 2
    Private Const THREAD_BASE_PRIORITY_MIN = -2
    Private Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
    Private Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
    Private Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
    Private Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
    Private Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)
    Private Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
    Private Const THREAD_PRIORITY_NORMAL = 0
    Private Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT

    'Thread creation flags
    Private Const CREATE_ALWAYS = 2
    Private Const CREATE_NEW = 1
    Private Const CREATE_NEW_CONSOLE = &H10
    Private Const CREATE_NEW_PROCESS_GROUP = &H200
    Private Const CREATE_NO_WINDOW = &H8000000
    Private Const CREATE_PROCESS_DEBUG_EVENT = 3
    Private Const CREATE_SUSPENDED = &H4
    Private Const CREATE_THREAD_DEBUG_EVENT = 2

    'Types and Enums
    Public Enum ThreadPriority
    tpLowest = THREAD_PRIORITY_LOWEST
    tpBelowNormal = THREAD_PRIORITY_BELOW_NORMAL
    tpNormal = THREAD_PRIORITY_NORMAL
    tpAboveNormal = THREAD_PRIORITY_ABOVE_NORMAL
    tpHighest = THREAD_PRIORITY_HIGHEST
    End Enum

    'Vars
    Private mThreadHandle As Long
    Private mThreadID As Long
    Private mPriority As Long
    Private mEnabled As Boolean
    Private mCreated As Boolean

    Public Function CreateNewThread(ByVal cFunction As Long, Optional ByVal cPriority As Long = tpNormal, Optional ByVal cEnabled As Boolean = True)
    'Creates a new Thread
    Dim mHandle As Long
    Dim CreationFlags As Long
    Dim lpThreadID As Long

    'Look if the thread has already been created
    If mCreated = True Then Exit Function

    'Look if the thread should be enabled
    If cEnabled = True Then
    CreationFlags = 0
    Else
    'Create a disabled thread, can be enabled later with the
    ''Enabled' property
    CreationFlags = CREATE_SUSPENDED
    End If

    'The CreateThread Function returns the handle of the created thread;
    'if the handle is 0, it failed creating the thread
    mHandle = CreateThread(ByVal 0&, ByVal 0&, cFunction, ByVal 0&, CreationFlags, lpThreadID)

    If mHandle = 0 Then 'Failed creating the thread
    'Insert your own error handling
    'Debug.Print "InitializeThread Function in clsThreading failed creating a new thread"
    Else
    mThreadHandle = mHandle
    mThreadID = lpThreadID
    mCreated = True
    End If
    End Function

    Public Function TerminateCurrentThread()
    'Terminates the current thread

    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    'Terminate the thread to prevent crashing if the app is closed
    'and the thread is still running (dangerous!)
    Call TerminateThread(mThreadHandle, ByVal 0&)
    mCreated = False
    End Function

    Public Property Get ThreadHandle() As Long
    'Returns the Handle of the current Thread
    ThreadHandle = mThreadHandle
    End Property

    Public Property Get ThreadID() As Long
    'Returns the ID of the current thread
    ThreadID = mThreadID
    End Property

    Public Property Get Priority() As Long
    'Returns a long value because the thread might have other priorities
    'than our five in the enum

    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    Priority = GetThreadPriority(mThreadHandle)
    End Property

    Public Property Let Priority(ByVal tmpValue As Long)
    'Sets the Thread Priority of the actual thread
    mPriority = tmpValue
    Call SetThreadPriority(mThreadHandle, tmpValue)
    End Property

    Public Property Get Enabled() As Boolean
    'Returns whether the Thread is enabled or not
    Enabled = mEnabled
    End Property

    Public Property Let Enabled(ByVal tmpValue As Boolean)
    'Enables/Disables the Thread

    'Ignore errors to prevent crashing if no thread has been created
    On Error Resume Next
    If tmpValue = True Then
    'Enable the thread
    Call ResumeThread(mThreadHandle)
    ElseIf tmpValue = False Then
    'Disable the thread
    Call SuspendThread(mThreadHandle)
    End If
    End Property

    Private Sub Class_Terminate()
    'Terminate the thread to prevent crashing if the app is closed
    'and the thread is still running (dangerous!)
    Call TerminateCurrentThread
    End Sub



  3. #3
    Join Date
    Jul 2000
    Location
    Milano, Italy
    Posts
    7,726

    Re: Another example


    This comes from Api-guide, a free tool you can download from
    http://www.allapi.net/

    'In a form
    'Add a command button to the form
    private Sub Command1_Click()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    'After you click this button, try to move the window
    'You will see that the AsyncThread-function was executed asynchronously
    hThread = CreateThread(byval 0&, byval 0&, AddressOf AsyncThread, byval 0&, byval 0&, hThreadID)
    CloseHandle hThread
    End Sub
    private Sub Form_Unload(Cancel as Integer)
    'If the thread is still running, close it
    If hThread <> 0 then TerminateThread hThread, 0
    End Sub
    'In a module
    Declare Sub Sleep Lib "kernel32" (byval dwMilliseconds as Long)
    Declare Function CreateThread Lib "kernel32" (lpThreadAttributes as Any, byval dwStackSize as Long, byval lpStartAddress as Long, lpParameter as Any, byval dwCreationFlags as Long, lpThreadID as Long) as Long
    Declare Function TerminateThread Lib "kernel32" (byval hThread as Long, byval dwExitCode as Long) as Long
    Declare Function CloseHandle Lib "kernel32" (byval hObject as Long) as Long
    public hThread as Long, hThreadID as Long
    public Sub AsyncThread()
    'let this thread sleep for 10 seconds
    Sleep 10000
    hThread = 0
    End Sub




    Special thanks to Lothar "the Great" Haensler, Tom Archer, Chris Eastwood, TCartwright, Bruno Paris, Dr_Michael
    and all the other wonderful people who made and make Codeguru a great place.
    Come back soon, you Gurus.

    The Rater
    ...at present time, using mainly Net 4.0, Vs 2010



    Special thanks to Lothar "the Great" Haensler, Chris Eastwood , dr_Michael, ClearCode, Iouri and
    all the other wonderful people who made and make Codeguru a great place.
    Come back soon, you Gurus.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured