Visual C++ .NET/Thread/Join
Joining Threads
#include "stdafx.h"
using namespace System;
using namespace System::Threading;
ref class MyThread
{
public:
static void ThreadFunc(Object ^Name);
};
void MyThread::ThreadFunc(Object ^Name)
{
for (int i = 0; i < 5; i++)
{
Console::WriteLine("{0} {1}", Name, i.ToString());
Thread::Sleep(1);
}
}
void main()
{
Thread ^thr1 =
gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc));
Thread ^thr2 =
gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc));
thr1->Start("Thread1");
thr1->Join();
thr2->Start("Thread2");
Console::WriteLine("End of Main");
}
Threads interrupt, suspend, join
#include "stdafx.h"
using namespace System;
using namespace System::Threading;
ref class MyThread
{
public:
static void ThreadFunc1();
static void ThreadFunc2();
};
void MyThread::ThreadFunc1()
{
Console::WriteLine("Before long sleep");
try
{
Thread::Sleep(Timeout::Infinite);
}
catch(ThreadInterruptedException^){/*continue processing*/}
Console::WriteLine("After long sleep");
}
void MyThread::ThreadFunc2()
{
for (int i = 0; i < 5; i++)
{
Console::WriteLine("Thread {0}",i.ToString());
Thread::Sleep(2);
}
}
void main()
{
Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc1));
Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc2));
Console::WriteLine("Sleep/interrupt thread");
thr1->Start();
Thread::Sleep(4);
for (int i = 0; i < 4; i++)
{
Console::WriteLine("**Main2 {0}", i.ToString());
Thread::Sleep(2);
}
thr1->Interrupt();
thr1->Join();
Console::WriteLine("\nSuspend/resume thread");
thr2->Start();
Thread::Sleep(4);
thr2->Suspend();
for (int i = 0; i < 4; i++)
{
Console::WriteLine("**Main1 {0}", i.ToString());
Thread::Sleep(2);
}
thr2->Resume();
}