我有一些针对windows的c++代码,我打算将其移植到java。但不幸的是,这并不像我想的那么容易。有人能帮帮我吗?
请看一下算法:
HANDLE hExitEvent;
HANDLE hDataAvailabeEvent;
while(true)
{
WaitForMultipleObjects();
if (hExitEvent is set)
break;
if (hDataAvailabeEvent)
{
process chunk of data;
if (all data processed)
ResetEvent(hDataAvailabeEvent);
}
}
HDataAvailableEvent可以从不同的线程设置。如果处理了所有数据,则事件将重置,并且在调用waitformultipleobjects时,线程将挂起,直到新数据到达或线程退出的时间到来。
我已经在java中看到了question waitformultipleobjects,但它不适合我的情况,因为我不能在一个周期的迭代中处理所有的新数据,并且处理会在一些迭代中扩散。
提前谢谢!
2条答案
按热度按时间30byixjq1#
WaitForMultipleObjects
是windows api函数。我个人会通过简单的事件(而不是调用ResetEvent
让线程触发某种事件,并注册一个工作线程来侦听这些事件)。0mkxixxg2#
一个似乎能满足您需求的简单解决方案如下:
你实际上没有任何事件,但它的工作方式大致相同。要将数据添加到处理队列吗?呼叫
process
以及executor
将处理您的Data
当它完成队列上的任何以前的任务时。关闭?呼叫stop
以及executor
将完成队列中的所有处理,但不接受任何其他工作(如果你需要一个更突然的结束,使用ExecutorService.shutdownNow
).