There is an educational task to process the array in several threads, and to create the threads manually, not even through the Thread object, but by calling the Win API function to create a new thread.

As I know, this function should be called something like CreateThread() and take 7 pieces of parameters. The mechanism of operation is approximately the same as with the Thread object.

Actually, I'm interested in what kind of function it is and how to call it from C # code.

1 answer 1

As I understand it, calling the unsafe WinAPI code directly, through the P / Invoke mechanism.

Example (taken from here )

C # method 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); 

Example of use:

 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; } [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); 
  • Thank you. I will try to apply in the task. - RussCoder 1:01 pm
  • one
    Here, of course, the example is somewhat strange - either System.Threading.ThreadStart , or your own public delegate void StartThread(); - RussCoder