Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何同步生产者线程和消费者线程[C+;+;/CLI]_C#_.net_Multithreading_C++ Cli - Fatal编程技术网

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库中找不到原始文档。好像已经被删除了。我在网上也找不到它 在本

编辑:忘记说程序必须在.NET3.5中;VisualStudio2008和Windows7

在我以前的MSDN库(用于VisualStudio2008)文档中,我遇到了一篇关于C#中线程的文章。我尝试转换为C++/CLI。我在转换过程中遇到了很多问题。现在只剩下一个:
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
是指哪个。