Click here to Skip to main content
13,291,084 members (58,351 online)
Click here to Skip to main content
Add your own
alternative version


18 bookmarked
Posted 3 Apr 2002

Managed threads in Managed C++

, 3 Apr 2002
Rate this:
Please Sign up or sign in to vote.
How to create threads in Managed C++


Using Managed C++ to create threads is not as easy as C#. If you already tried to compile a Managed C++ program with threads, you know what I am talking about. 


First, do not try to add the thread in the same class, it won't compile. The easiest way I personally found is to create a new managed class ( remember to add <code lang=mc++>__gc in the beginning of the class declaration ). In these instance we'll call it <code lang=mc++>CMyThreads. Why not? Every program should have a CMySomething as a class.

<pre lang=mc++>#pragma once __gc class CMyThreads { public: CMyThreads(void); ~CMyThreads(void); void MyThreadProc(); void AddArguments(void* pArg1, void* pArg2) void * m_FirstArgument ; void * m_SecondArgument ; };

One problem in managed C++ threads is the arguments. You must create a function to call before starting the thread if you want arguments. (See <code lang=mc++>AddArguments above)

Calling the thread from another class:

<pre lang=mc++>foo() { CMyThreads * pMyThread; pMyThread = new CMyThreads; pMyThread->AddArguments(Argument1, Argument2); ThreadStart * pThread = new ThreadStart(pMyThread, &CMyThreads::MyThreadProc); Thread *oThread = new Thread(pThread); oThread->Start(); }

Before we create <code lang=mc++>ThreadStart you must call <code lang=mc++>AddArguments if you want arguments on this thread. The thread will not begin until you call the member function <code lang=mc++>Start()

<pre lang=mc++>#include "StdAfx.h" #using <mscorlib.dll> using namespace System; using namespace System::Threading; #include <stdio.h> #include "mythreads.h" CMyThreads::CMyThreads(void) { } CMyThreads::~CMyThreads(void) { } void CMyThreads::MyThreadProc() { Console::WriteLine(S"Starting Thread... "); Thread::Sleep(5); pClass->ExternalFunction(/*Arguments*/); Console::WriteLine(S"Finishing Thread..."); } void CMyThreads::AddArguments(void* pArg1, void* pArg2) { m_FirstArgument = pArg1; m_SecondArgument = pArg2; }


Remember to <code lang=mc++>Sleep to allow the main process to continue. Also you put anything you like in <code lang=mc++>MyThreadProc() you can also call a function in another class. I hope you have fun!


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Albert Pascual
Web Developer
United States United States
Al is just another Software Engineer working in C++, ASp.NET and C#. Enjoys snowboarding in Big Bear, and wait patiently for his daughters to be old enough to write code and snowboard.

Al is a Microsoft ASP.NET MVP


You may also be interested in...


Comments and Discussions

GeneralThreads in C# Pin
Anonymous18-Jun-03 22:05
sussAnonymous18-Jun-03 22:05 
GeneralRe: Threads in C# Pin
Albert Pascual19-Jun-03 6:36
memberAlbert Pascual19-Jun-03 6:36 
GeneralRe: Threads in C# Pin
Anonymous13-Aug-03 20:20
sussAnonymous13-Aug-03 20:20 
GeneralRe: Threads in C# Pin
R.selvam30-Dec-03 10:59
memberR.selvam30-Dec-03 10:59 
GeneralRe: Threads in C# Pin
Haroon Alvi4-Aug-09 3:10
memberHaroon Alvi4-Aug-09 3:10 
Generalregarding thread creation Pin
Kalagotla10-Dec-02 0:50
sussKalagotla10-Dec-02 0:50 
GeneralRe: regarding thread creation Pin
R.selvam30-Dec-03 10:55
memberR.selvam30-Dec-03 10:55 
GeneralWrong information!!! Pin
Nish [BusterBoy]4-Apr-02 15:01
memberNish [BusterBoy]4-Apr-02 15:01 
In the article you say :-

"First, do not try to add the Thread in the same class, it won't compile"

This statement is wrong!


If I am awake and my eyes are closed, it does not necessarily mean that I am thinking of naked women.

GeneralRe: Wrong information!!! Pin
mikanu2-Aug-05 13:48
membermikanu2-Aug-05 13:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.171207.1 | Last Updated 4 Apr 2002
Article Copyright 2002 by Albert Pascual
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid