c# 两个线程 执行时间不一样

Q_QZuo 2017-01-06 10:02:20
C#中,我在程序中添加了两个线程,一个用于处理数据,一个用于显示数据,数据处理完之后再显示,处理数据的时间大概为30ms,显示数据的时间大概为70ms,请问应该如何添加异常,确保处理数据和显示数据按顺序执行,并且不会出现在显示数据的时候,不会出现处理数据的进程循环了两次?求救!!!
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Q_QZuo 2017-01-07
  • 打赏
  • 举报
回复
我是想,如果我设置为每30ms传递一次数据,如果才能确保,我在显示数据的时候,不会已经处理了两个传来的数据?如果用队列,也会造成一个队列已满,但数据还是在队列中写入的现象
qq_23278607 2017-01-07
  • 打赏
  • 举报
回复
你把处理的数据和显示的数据放在两个队列中去处理,这样就不会出现你说的问题了
  • 打赏
  • 举报
回复
引用 4 楼 Q_QZuo 的回复:
我是想,如果我设置为每30ms传递一次数据,如果才能确保,我在显示数据的时候,不会已经处理了两个传来的数据?如果用队列,也会造成一个队列已满,但数据还是在队列中写入的现象
奢谈“线程”和“队列”都是似是而非的东西。 异步操作就是这类代码,例如
void 处理数据(xxxxxx)
{
     执行对xxxxx的处理;
     ThreadPool.QueueUserWorkItem(h =>
     {
          匿名委托中可以使用处理结果数据
     });
}
     
处理完了就不等待,异步执行后续处理。如果后续处理需要“排队”,那么你使用 lock 语法来保证后续处理过程某几条语句是互斥的(只有一个线程可以执行到其中)即可。 或者你可以使用 asycn/await 语法。 总之,这里其实扯不上什么一个死循环的“消费者线程”,你也看不到空洞的“队列”。因为系统线程池机制本身就包括了数据参数,而lock 本来就是排队! 那些比较空洞的所谓“线程、队列”的模式是15年前的 java 中的底层的介绍。在. net 中一些列封装好了的高级编程模式,不用底层写代码。
Q_QZuo 2017-01-07
  • 打赏
  • 举报
回复
最快的是一秒钟60次
xian_wwq 2017-01-07
  • 打赏
  • 举报
回复
数据生产的快,消费的慢就是这样; 不过lz想过没有,30ms刷新一次数据有必要吗? 只要后台处理数据正常,显示数据跳着显示并不影响业务 数据显示到秒级大多数都能满足用户要求
Q_QZuo 2017-01-06
  • 打赏
  • 举报
回复
因为在开始大概70ms就会有数据传输过来,而如果全部按顺序执行的话处理数据加上显示数据就需要110ms.
Poopaye 2017-01-06
  • 打赏
  • 举报
回复
按顺序执行为什么还要2个线程?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧