Introduction
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.
Details
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 __gc
in the beginning of the class declaration ).
In these instance we'll call it CMyThreads
. Why not? Every program should
have a CMySomething as a class.
#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 AddArguments
above)
Calling the thread from another class:
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 ThreadStart
you must call AddArguments
if
you want arguments on this thread.
The thread will not begin until you call the member function Start()
#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();
Console::WriteLine(S"Finishing Thread...");
}
void CMyThreads::AddArguments(void* pArg1, void* pArg2)
{
m_FirstArgument = pArg1;
m_SecondArgument = pArg2;
}
Conclusion
Remember to Sleep
to allow the main process to continue.
Also you put anything you like in MyThreadProc()
you can also call a
function in another class. I hope you have fun!