0

我刚刚开始体验线程并且无法获得一些基础知识。我如何以间隔为 10 毫秒的线程写入控制台?所以我有一个线程类:

public ref class SecThr
{
public:
    DateTime^ dt;
    void getdate()
    {
        dt= DateTime::Now; 
        Console::WriteLine(dt->Hour+":"+dt->Minute+":"+dt->Second); 
    }
};

int main()
{
    Console::WriteLine("Hello!");

    SecThr^ thrcl=gcnew SecThr;
    Thread^ o1=gcnew Thread(gcnew ThreadStart(SecThr,&thrcl::getdate));
}

我无法在我的 Visual c++ 2010 c++ cli 中编译它,出现很多错误 C3924、C2825、C2146

4

1 回答 1

1

您只是在编写不正确的 C++/CLI 代码。最明显的错误:

  • 如果您没有完整地编写 System::Threading::Thread,则缺少您使用的类的using 命名空间指令,例如 System::Threading。
  • 在像 DateTime 这样的值类型上使用 ^ 帽子,不会作为编译错误发出信号,但对程序效率非常不利,它会导致值被装箱。
  • 没有正确构造委托对象,第一个参数是目标对象,第二个参数是函数指针。

重写它使其工作:

using namespace System;
using namespace System::Threading;

public ref class SecThr
{
    DateTime dt;
public:
    void getdate() {
        dt= DateTime::Now; 
        Console::WriteLine(dt.Hour + ":" + dt.Minute + ":" + dt.Second);
    }
};


int main(array<System::String ^> ^args)
{
    Console::WriteLine("Hello!");

    SecThr^ thrcl=gcnew SecThr;
    Thread^ o1=gcnew Thread(gcnew ThreadStart(thrcl, &SecThr::getdate));
    o1->Start();
    o1->Join();
    Console::ReadKey();
}
于 2013-09-27T13:51:10.990 回答