【发布时间】:2013-07-10 15:18:07
【问题描述】:
我在 Visual C++/CLR 中的线程编程方面遇到了困难。我已经搜索了很多,并在互联网上找到了很多材料,包括官方资源,但我仍然感到困惑。 C++/CLR 的资源很少。其中大多数是用于 C# 或旧式 C++ 的。我尝试运行这个简单的代码。我选择了一个 clr 控制台应用程序类型的新项目并将以下代码放在那里,但我遇到了我不理解的错误。
// thread_clr.cpp : main project file.
#include "stdafx.h"
using namespace System;
using namespace System;
using namespace System::Threading;
class MessagePrinter;
// class ThreadTester demonstrates basic threading concepts
class ThreadTester
{
static int Main()
{
// Create and name each thread. Use MessagePrinter's
// Print method as argument to ThreadStart delegate.
MessagePrinter printer1 = gcnew MessagePrinter();
Thread thread1 = gcnew Thread ( gcnew ThreadStart( printer1.Print ) );
thread1.Name = "thread1";
MessagePrinter printer2 = gcnew MessagePrinter();
Thread thread2 = gcnew Thread ( gcnew ThreadStart( printer2.Print ) );
thread2.Name = "thread2";
MessagePrinter printer3 = gcnew MessagePrinter();
Thread thread3 = gcnew Thread ( gcnew ThreadStart( printer3.Print ) );
thread3.Name = "thread3";
Console.WriteLine( "Starting threads" );
// call each thread's Start method to place each
// thread in Started state
thread1.Start();
thread2.Start();
thread3.Start();
Console.WriteLine( "Threads started\n" );
} // end method Main
}; // end class ThreadTester
class MessagePrinter
{
private int sleepTime;
private static Random random = gcnew Random();
// constructor to initialize a MessagePrinter object
public MessagePrinter()
{
// pick random sleep time between 0 and 5 seconds
sleepTime = random.Next( 5001 );
}
//controls Thread that prints message
public void Print()
{
// obtain reference to currently executing thread
Thread current = Thread.CurrentThread;
// put thread to sleep for sleepTime amount of time
Console.WriteLine(current.Name + " going to sleep for " + sleepTime );
Thread.Sleep ( sleepTime );
// print thread name
Console.WriteLine( current.Name + " done sleeping" );
} // end method Print
} // end class MessagePrinter
请帮忙。或者更好的是,请指导我一些教程或其他影响。我知道 SO 不是一个教程网站,我也不是在问一个,但如果有人能至少指出 C++/CLR 线程的资源,我将不胜感激。 C++/CLR Winform 线程。真的很感激
问候
一些错误是:
'printer1' 使用未定义的类 'MessagePrinter' 'Print' : 不是 'System::Int32' 'System::Threading::ThreadStart' 的成员:a 委托构造函数需要 2 个参数 'System::Threading::Thread::Thread' : 没有合适的默认值 可用的构造函数'System::Threading::Thread::Thread':否 适当的默认构造函数可用'语法错误:'int'应该 前面有':''不能在非托管中声明托管'随机' 'MessagePrinter' 不能声明全局或静态变量,或者 引用 gc 堆中对象的本机类型的成员 'MessagePrinter::random' : 你不能嵌入引用的实例 在本机类型 'MessagePrinter::random' 中键入 'System::Random' : 只有静态 const 整数数据成员可以在 类 'MessagePrinter' 前面应该有 ':' 'void' 应该是 前面有':'
【问题讨论】:
-
那么你得到了什么错误?我怀疑你会在这里找到读心者,更不用说通过互联网阅读其他人的屏幕输出了。
-
@nvoigt...抱歉,这是我的恼怒,我大喊大叫,因为我在过去 1 天半的时间里被困在这里...更新了问题
标签: multithreading winforms visual-c++ c++-cli clr