0

我有几个线程正在运行,它们都是不断拍摄屏幕不同区域的照片所必需的。每个线程都有自己的Robot. 问题是,不是每个线程异步拍摄照片,而是一次拍摄一张。

例如,如果我只截取一张截图,它只需要大约 20-30 毫秒。但是,如果我有 5 个线程并且它们都尝试截取屏幕截图(屏幕的不同部分),那么似乎需要 100 - 150 毫秒才能获得所有 5 张截图,清楚地表明尽管robot.createScreenCapture()方法是同步拍摄的从不同的线程调用。我希望在 20-30 毫秒内完成所有 5 个屏幕截图。

有没有办法让机器人异步工作并同时将屏幕截图发送到每个线程?或者另一种异步截屏的方法可以在 Windows 中使用?

4

2 回答 2

2

至少在OpenJDK 实现中,createScreenCapturesynchronized因为它使用底层操作系统调用来直接读取屏幕缓冲区,所以不,这显然是不可能的。大概底层的图形基元不是或不能保证是可重入的。

于 2013-10-15T00:54:55.693 回答
0

我不同意这个解决方案。

createScreenCapture是同步的,但您可以创建两个或多个 awt 机器人实例并在 a 中使用它们ScheduledExecutorService以获得所需的并行化。

现在写我自己的屏幕捕捉软件。

于 2020-05-19T14:12:57.927 回答