文章作者 100test 发表时间 2007:09:15 12:43:40
来源 100Test.Com百考试题网
using namespace System. using namespace System::Threading. int main() { /*1*/ MessageBuffer^ m = gcnew MessageBuffer. /*2a*/ ProcessMessages^ pm = gcnew ProcessMessages(m). /*2b*/ Thread^ pmt = gcnew Thread(gcnew ThreadStart(pm,&.ProcessMessages::ProcessMessagesEntryPoint)). /*2c*/ pmt->Start(). /*3a*/ CreateMessages^ cm = gcnew CreateMessages(m). /*3b*/ Thread^ cmt = gcnew Thread(gcnew ThreadStart(cm, &.CreateMessages::CreateMessagesEntryPoint)). /*3c*/ cmt->Start(). /*4*/ cmt->Join(). /*5*/ pmt->Interrupt(). /*6*/ pmt->Join(). Console::WriteLine("Primary thread terminating"). } public ref class MessageBuffer { String^ messageText. public: void SetMessage(String^ s) { /*7*/ Monitor::Enter(this). messageText = s. /*8*/ Monitor::Pulse(this). Console::WriteLine("Set new message {0}", messageText). Monitor::Exit(this). } void ProcessMessages() { /*9*/ Monitor::Enter(this). while (true) { try { /*10*/ Monitor::Wait(this). } catch (ThreadInterruptedException^ e) { Console::WriteLine("ProcessMessage interrupted"). return. } Console::WriteLine("Processed new message {0}", messageText). } Monitor::Exit(this). } }. public ref class CreateMessages { MessageBuffer^ msg. public: CreateMessages(MessageBuffer^ m) { msg = m. } void CreateMessagesEntryPoint() { for (int i = 1. i <= 5. i) { msg->SetMessage(String::Concat("M-", i.ToString())). Thread::Sleep(2000). } Console::WriteLine("CreateMessages thread terminating"). } }. public ref class ProcessMessages { MessageBuffer^ msg. public: ProcessMessages(MessageBuffer^ m) { msg = m. } void ProcessMessagesEntryPoint() { msg->ProcessMessages(). Console::WriteLine("ProcessMessages thread terminating"). } }. |
Set new message M-1 Processed new message M-1 Set new message M-2 Processed new message M-2 Set new message M-3 Processed new message M-3 Set new message M-4 Processed new message M-4 Set new message M-5 Processed new message M-5 CreateMessages thread terminating ProcessMessage interrupted ProcessMessages thread terminating Primary thread terminating |
相关文章
《C 0x漫谈》系列之:右值引用
C 类对象的复制-拷贝构造函数
缓冲区溢出原理浅析以及防护
C 中cla 与struct的区别
实例解析C _CLI线程之线程状态持久性
C _CLI解析之基于堆栈的对象与跟踪引用
MoreEffectiveC 之考虑变更程序库
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛