title: Thread Programming in C++/CLR
body: <p>I am really struggling with Thread programming in Visual C++/CLR. I have searched a lot and found lots of material on the internet including the official resources however i am still confused. There are very few resources for C++/CLR. Most of them are for C# or old style C++. I try to run this simple code. I choose a new project of type clr console applicatioN and place the following code there but i am getting errors which i am not understading.  </p>
  
  <pre><code>// thread_clr.cpp : main project file.
  
  #include "stdafx.h"
  
  using namespace System;
  using namespace System;
  using namespace System::Threading;
  class MessagePrinter;
  
  // class ThreadTester demonstrates basic threading concepts
  class ThreadTester
  {
      static int Main()
      {
          // Create and name each thread. Use MessagePrinter's
          // Print method as argument to ThreadStart delegate.
          MessagePrinter printer1 = gcnew MessagePrinter();
          Thread thread1 = gcnew Thread ( gcnew ThreadStart( printer1.Print ) );
          thread1.Name = "thread1";
  
          MessagePrinter printer2 = gcnew MessagePrinter();
          Thread thread2 = gcnew Thread ( gcnew ThreadStart( printer2.Print ) );
          thread2.Name = "thread2";
  
          MessagePrinter printer3 = gcnew MessagePrinter();
          Thread thread3 = gcnew Thread ( gcnew ThreadStart( printer3.Print ) );
          thread3.Name = "thread3";
  
          Console.WriteLine( "Starting threads" );
          // call each thread's Start method to place each
          // thread in Started state
          thread1.Start();
          thread2.Start();
          thread3.Start();
  
          Console.WriteLine( "Threads started\n" );
      } // end method Main
  }; // end class ThreadTester
  
  class MessagePrinter
  {
      private int sleepTime;
      private static Random random = gcnew Random();
  
      // constructor to initialize a MessagePrinter object
      public MessagePrinter()
      {
          // pick random sleep time between 0 and 5 seconds
          sleepTime = random.Next( 5001 );
      }
  
      //controls Thread that prints message
      public void Print()
      {
          // obtain reference to currently executing thread
          Thread current = Thread.CurrentThread;
  
          // put thread to sleep for sleepTime amount of time
          Console.WriteLine(current.Name + " going to sleep for " + sleepTime );
  
          Thread.Sleep ( sleepTime );
  
          // print thread name
          Console.WriteLine( current.Name + " done sleeping" );
  
      } // end method Print
  } // end class MessagePrinter
  </code></pre>
  
  <p>Please help. Or better still please guide me to some tutorials or something to that affect. I understand SO is not a tutorial site and i am not asking one but i would appreciate if some one could atleast point out the resources for C++/CLR thread. C++/CLR Winform Threads. Would really appreciate it</p>
  
  <p>Regards</p>
  
  <p>Some errors are:</p>
  
  <blockquote>
    <p>'printer1' uses undefined class 'MessagePrinter' 'Print' : is not a
    member of 'System::Int32' 'System::Threading::ThreadStart' : a
    delegate constructor expects 2 argument(s)
    'System::Threading::Thread::Thread' : no appropriate default
    constructor available 'System::Threading::Thread::Thread' : no
    appropriate default constructor available 'syntax error : 'int' should
    be preceded by ':' 'cannot declare a managed 'random' in an unmanaged
    'MessagePrinter'may not declare a global or static variable, or a
    member of a native type that refers to objects in the gc heap
    'MessagePrinter::random' : you cannot embed an instance of a reference
    type, 'System::Random', in a native type 'MessagePrinter::random' :
    only static const integral data members can be initialized within a
    class 'MessagePrinter' should be preceded by ':' 'void' should be
    preceded by ':'</p>
  </blockquote>