CreateThread (kernel32)
Last changed: -197.211.63.30

.

Warning: All signatures on this page are wrong as of 2014-01-24. dwStackSize is SIZE_T and ThreadStart has the wrong delegate signature. It only works by coincidence.

Summary

C# Signature:

[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private unsafe static extern uint CreateThread(
        uint* lpThreadAttributes,
        uint dwStackSize,
        ThreadStart lpStartAddress,
        uint* lpParameter,
        uint dwCreationFlags,
        out uint lpThreadId);

Boo Signature:

[DllImport("kernel32.dll")]
def CreateThread(lpThreadAttributes as int, dwStackSize as int, lpStartAddress as IntPtr, param as int, dwCreationFlags as int, ref lpThreadId as uint) as IntPtr:
     pass

Notes:

None.

Sample Code:

public delegate void StartThread();

unsafe uint StartThread(StartThread ThreadFunc, int StackSize)
    {
        uint a = 0;
        uint* lpThrAtt = &a;
        uint i = 0;
        uint* lpParam = &i;
        uint lpThreadID = 0;

        uint dwHandle = CreateThread(null, (uint)StackSize, ThreadFunc, lpParam, 0, out lpThreadID);
        if (dwHandle == 0) throw new Exception("Unable to create thread!");
        return dwHandle;
    }

Tips & Tricks:

Please add some!

C# Signature:

[DllImport("kernel32.dll")]
static extern IntPtr CreateThread([In] ref SECURITY_ATTRIBUTES
   SecurityAttributes, uint StackSize, System.Threading.ThreadStart StartFunction,
   IntPtr ThreadParameter, uint CreationFlags, out uint ThreadId);

User-Defined Types:

SECURITY_ATTRIBUTES

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Alternative Managed API:

Try System.Threading.Thread.Start. It doesn't give you all the control of directly calling CreateThread, (such as specifing the flags), but it will get you a vanilla thread to spin up.

Documentation