【问题标题】:A DLL function must be called on a different threadDLL 函数必须在不同的线程上调用
【发布时间】:2012-10-11 04:34:45
【问题描述】:

我有一个 dll 函数 Copy(const char** srcFiles, const char* dst),它将 srcFiles 复制到文件夹 dst。例如,它必须每 0.01 秒一次。将复制进度信息(百分比)发送到我自己的函数CopyProgress。问题是我不能更改Copy 函数代码,所以我认为在不同的线程上执行这个函数是个好主意。但我是多线程的初学者,无法想象如何做到这一点。

有什么想法、提示吗?谢谢。

【问题讨论】:

  • 与流行的看法相反,多线程并不是所有编程问题的自动解决方案,而且经常被过度使用。如果您无法更改Copy,并且它没有进度挂钩/回调的方法,那么您无能为力。

标签: c++ multithreading dll


【解决方案1】:

首先,您应该真正考虑更改 Copy 以通过回调为您提供进度信息。但是,如果您绝对必须不更改Copy,则必须使用CreateThread 在另一个线程中运行它,然后定期扫描目标目录以查看已复制了多少(每 0.01 秒可能太快了这种方法很实用——如果你需要这么多的粒度,你必须添加一些钩子到Copy)。

【讨论】:

  • FindXXXXChangeNotification API 可能会极大地帮助完成 bdonian 所说的事情。设置并非易事,但是 OP 关于监视复制文件的问题的本质很可能是他的救助。如果这是一个通用解决方案问题,OP 可能是 SOL,但由于它是文件副本(实际上是副本),您可以利用操作系统系统调用 Windows 来帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多