Visual C++ .NET/Thread/Join — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:06, 26 мая 2010
Joining Threads
<source lang="csharp">
- 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");
}
</source>
Threads interrupt, suspend, join
<source lang="csharp">
- 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();
}
</source>