线程操作动态数组解决方法
线程操作动态数组
updateModel方法会一直被调用,所以MODELS数组的值会越来越多,因为UpdateModelsStatus方法会执行一段时间,所以我加了线程,不然会阻塞的,线程里,如果MODELS的COUNT每大于50就会更新一次,这样就可以吧所有传来的MODEL都更新掉,但是如果小于50的时候,models.RemoveRange(0, models.Count - 1);如果在这个地方MODELS有添加新的MODEL,那么它的COUNT和传入方法的MODELS就会不一样(UpdateModelsStatus(models);),这样就会少更新一个或多个,这个该怎么解决?求高手
注:原来UpdateModelsStatus的方法传入的是一个MODEL,因为updateModel执行太快,但是UpdateModelsStatus执行很慢,所以加了数组来缓冲下。
------解决方案--------------------
用队列
开两个线程
一个写
一个读,有数据就读,读一个少一个,不管是不是够50个
不行吗?
------解决方案--------------------
线程的经典案例 生产者消费者,看看吧
------解决方案--------------------
用队列吧,主线程入队,再开一个线程处理队列。
注意进出队列的时候lock一下
------解决方案--------------------
这样就行了
- C# code
private List<Model> models = new List<Model>(); public void updateModel(model) { models.Add(model); if (isOpen) { Thread thread = new Thread(UpdateModels); thread.Start(); isOpen = false; } } private void UpdateModels() { while (flag) { if (models != null) { if (models.Count > 50) { UpdateModelsStatus(models); models.RemoveRange(0, 49); isUpdate = true; } else { if (isUpdate && models.Count > 0) { UpdateModelsStatus(models); models.RemoveRange(0, models.Count - 1); isUpdate = false; } } } } }
updateModel方法会一直被调用,所以MODELS数组的值会越来越多,因为UpdateModelsStatus方法会执行一段时间,所以我加了线程,不然会阻塞的,线程里,如果MODELS的COUNT每大于50就会更新一次,这样就可以吧所有传来的MODEL都更新掉,但是如果小于50的时候,models.RemoveRange(0, models.Count - 1);如果在这个地方MODELS有添加新的MODEL,那么它的COUNT和传入方法的MODELS就会不一样(UpdateModelsStatus(models);),这样就会少更新一个或多个,这个该怎么解决?求高手
注:原来UpdateModelsStatus的方法传入的是一个MODEL,因为updateModel执行太快,但是UpdateModelsStatus执行很慢,所以加了数组来缓冲下。
------解决方案--------------------
用队列
开两个线程
一个写
一个读,有数据就读,读一个少一个,不管是不是够50个
不行吗?
------解决方案--------------------
线程的经典案例 生产者消费者,看看吧
------解决方案--------------------
用队列吧,主线程入队,再开一个线程处理队列。
注意进出队列的时候lock一下
------解决方案--------------------
这样就行了
- C# code
public void updateModel(Model model) { models.Add(model); if (isOpen) { if (models.Count > 50) { Thread thread = new Thread(mds => { UpdateModelsStatus(mds as List<Model>); }); thread.Start(new List<Model>(models)); models.Clear(); } isOpen = false; } }