Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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语言进行C和C++对话。 在C++中,我们有两个类:PraveStEXT和文本。_C#_C++_Multithreading_Memory Leaks_Com - Fatal编程技术网

C# 如何防止线程使用的对象被丢弃?如何控制对象的生存期? 我们考虑通过C语言进行C和C++对话。 在C++中,我们有两个类:PraveStEXT和文本。

C# 如何防止线程使用的对象被丢弃?如何控制对象的生存期? 我们考虑通过C语言进行C和C++对话。 在C++中,我们有两个类:PraveStEXT和文本。,c#,c++,multithreading,memory-leaks,com,C#,C++,Multithreading,Memory Leaks,Com,文本类: 保存文本详细信息对象,如字符串、numberOfPages等 ProcessText类: 它读取给定输入目录中的文件,并在2个函数的帮助下使用C组件处理这些文件 ReadAll方法: 它读取目录中的所有文件,创建文本对象并将其传递给ProcessAll ProcessAll方法: 考虑多线程场景,其中将C对象的输入文本对象馈送到线程。 在process内部,文本对象的所有作用域都完成了,我需要一些机制来防止对象超出作用域,直到线程完成处理,如果这不可能,至少触发C组件停止对该文本对象的

文本类: 保存文本详细信息对象,如字符串、numberOfPages等

ProcessText类: 它读取给定输入目录中的文件,并在2个函数的帮助下使用C组件处理这些文件

ReadAll方法: 它读取目录中的所有文件,创建文本对象并将其传递给ProcessAll

ProcessAll方法: 考虑多线程场景,其中将C对象的输入文本对象馈送到线程。

在process内部,文本对象的所有作用域都完成了,我需要一些机制来防止对象超出作用域,直到线程完成处理,如果这不可能,至少触发C组件停止对该文本对象的处理

我特别想要的是,它可以通过使用 C++类?如果在销毁文本对象的过程中查询C组件 关于文本对象的状态,我们可以阻止它的内存吗 在不等待线程完成操作的情况下销毁?而且 如果对象未被销毁,但内存仍将被释放。可以 我们阻止内存被释放?如果内存仍然有值 作为内存泄漏,线程可以安全地使用它,也可以 用操作系统写其他东西?如果它能被 操作系统可以通过使用指针和内存大小来阻塞内存 反对


一般来说,在C中只需在线程末尾执行GC.KeepAlivetext

如果这还不够,例如,因为需要在所有线程完成其工作之前保持这些文本对象的活动状态,则必须保留对文本对象的引用。也许实现这一点最简单的方法是使用PLINQ,例如files.aspallel.Select…ToList或SelectMany


这样,在并行枚举结束时,您将拥有对所有文本对象的引用,假设这是您将从Select或SelectMany返回的内容。然后,您需要控制引用新的可枚举项所需的时间,例如,您可能必须在ProcessAll方法末尾使用GC.keepalivetext。

文本对象有多大?你不能复制一下吗?你只记录了一个假想的问题,C程序中的内存管理是自动的。您的C++析构函数不能运行,直到COM对象的RCW被收集并最终确定。直到C代码不再有对对象的活动引用,这才可能发生。@Robinson Text对象只是基于此的一个示例,我必须放大。。我们可以考虑对象是最小的100MBS的数据。