我有一个包含大量输入数据(视频)的任务。我需要在后台处理它的帧而不冻结UI,我不需要处理每一帧。
所以我想在后台忙的时候创建一个后台线程并跳过帧。比我从视频输入再次获得另一帧。
我现在有这个简单的代码。我工作。但它会引起麻烦吗?可能有更好的方法吗?
public class VideoProcessor{
bool busy=false;
void VideoStreamingEvent(Frame data){
if(!busy){
busy=true;
InvokeInBackground(()=>{
DataProcessing(data);
busy=false;
});
}
}
}
答案 0 :(得分:1)
但这会引起麻烦吗?可能会有更好的方法吗?
如果VideoStreamingEvent
方法永远不会在多个线程上同时执行,那么只要将volatile
添加到busy
字段声明中,这样就可以正常工作。在实践中,它可能出现,没有它就可以正常工作,但这种行为无法保证。
如果可以在多个线程上调用VideoStreamingEvent
,那么您需要在读取和写入busy
字段的位置进行一些同步。