C# 如何同步生产者线程和消费者线程[C+;+;/CLI]
编辑:忘记说程序必须在.NET3.5中;VisualStudio2008和Windows7 在我以前的MSDN库(用于VisualStudio2008)文档中,我遇到了一篇关于C#中线程的文章。我尝试转换为C++/CLI。我在转换过程中遇到了很多问题。现在只剩下一个:C# 如何同步生产者线程和消费者线程[C+;+;/CLI],c#,.net,multithreading,c++-cli,C#,.net,Multithreading,C++ Cli,编辑:忘记说程序必须在.NET3.5中;VisualStudio2008和Windows7 在我以前的MSDN库(用于VisualStudio2008)文档中,我遇到了一篇关于C#中线程的文章。我尝试转换为C++/CLI。我在转换过程中遇到了很多问题。现在只剩下一个:C3371:除非创建委托实例,否则无法获取“Producer::ThreadRun”的地址 原始文档的标题:如何:同步生产者和消费者线程(C#编程指南) 我在联机MSDN库中找不到原始文档。好像已经被删除了。我在网上也找不到它 在本
C3371:除非创建委托实例,否则无法获取“Producer::ThreadRun”的地址
原始文档的标题:如何:同步生产者和消费者线程(C#编程指南)
我在联机MSDN库中找不到原始文档。好像已经被删除了。我在网上也找不到它
在本文件中,代码包括:
- 在队列中保留20个整数的生产者线程
- 对队列中刚输入的数字进行处理的使用者线程
- 主线程将每隔2.5秒显示队列中的数字。当主线程在队列上工作时,其他线程停止李>
这是C#的原始代码:
线程类构造函数需要委托对象。您已经习惯了自动将方法转换为委托的C语言语法。但是这种糖在C++/CLI中不存在,您必须自己创建委托对象。而且要明确目标对象和目标方法,C#编译器想要推断目标对象。这确实为C++/CLI语言提供了一些C#不具备的功能,但代价是必须编写更强大的代码:
System::Threading::Thread ^ producerThread =
gcnew System::Threading::Thread(
gcnew System::Threading::ThreadStart(producer, &Producer::ThreadRun)
);
在这些场景中考虑.NET 4中的现有支持,如BuffjCug和CONTRONCE队列。< /P>
线程类构造函数需要委托对象。您已经习惯了自动将方法转换为委托的C语言语法。但是这种糖在C++/CLI中不存在,您必须自己创建委托对象。而且要明确目标对象和目标方法,C#编译器想要推断目标对象。这确实为C++/CLI语言提供了一些C#不具备的功能,但代价是必须编写更强大的代码:
System::Threading::Thread ^ producerThread =
gcnew System::Threading::Thread(
gcnew System::Threading::ThreadStart(producer, &Producer::ThreadRun)
);
在这些场景中考虑.NET 4中的现有支持,如BuffjCug和CONTRONCE队列。< /P>
线程类构造函数需要委托对象。您已经习惯了自动将方法转换为委托的C语言语法。但是这种糖在C++/CLI中不存在,您必须自己创建委托对象。而且要明确目标对象和目标方法,C#编译器想要推断目标对象。这确实为C++/CLI语言提供了一些C#不具备的功能,但代价是必须编写更强大的代码:
System::Threading::Thread ^ producerThread =
gcnew System::Threading::Thread(
gcnew System::Threading::ThreadStart(producer, &Producer::ThreadRun)
);
在这些场景中考虑.NET 4中的现有支持,如BuffjCug和CONTRONCE队列。< /P>
线程类构造函数需要委托对象。您已经习惯了自动将方法转换为委托的C语言语法。但是这种糖在C++/CLI中不存在,您必须自己创建委托对象。而且要明确目标对象和目标方法,C#编译器想要推断目标对象。这确实为C++/CLI语言提供了一些C#不具备的功能,但代价是必须编写更强大的代码:
System::Threading::Thread ^ producerThread =
gcnew System::Threading::Thread(
gcnew System::Threading::ThreadStart(producer, &Producer::ThreadRun)
);
在这些场景中考虑.NET 4中的现有支持,比如BlockingCollection和ConcurrentQueue。
使用ConcurrentQueue这样的东西会不会更容易:使用ConcurrentQueue这样的东西会不会更容易:使用ConcurrentQueue这样的东西会不会更容易:啊,这很有效。谢谢我喜欢C#,因为它为我做了很多事情。在C++/CLI中,我必须键入更多的内容。例如,在将锁(((ICollection)\u queue.SyncRoot)
转换为C++/CLI时,我必须注意原始代码中的ICollection
是指哪个。啊,这是可行的。谢谢我喜欢C#,因为它为我做了很多事情。在C++/CLI中,我必须键入更多的内容。例如,在将锁(((ICollection)\u queue.SyncRoot)
转换为C++/CLI时,我必须注意原始代码中的ICollection
是指哪个。啊,这是可行的。谢谢我喜欢C#,因为它为我做了很多事情。在C++/CLI中,我必须键入更多的内容。例如,在将锁(((ICollection)\u queue.SyncRoot)
转换为C++/CLI时,我必须注意原始代码中的ICollection
是指哪个。啊,这是可行的。谢谢我喜欢C#,因为它为我做了很多事情。在C++/CLI中,我必须键入更多的内容。例如,在将锁(((ICollection)\u queue.SyncRoot)
转换为C++/CLI时,我必须注意原始代码中的ICollection
是指哪个。