C# 多线程 怎么能够让他们并行执行,而不是像后台线程那样执行。
我的需求是这样子的,1:在处理的数据的时候先接收行情数据,接收到行情数据开始进行相应处理,但是接收行情的动作还是要走的,不能因为要在进行完相应处理才继续接收行情。要满足条...
我的需求是这样子的, 1:在处理的数据的时候先接收 行情数据,接收到行情数据开始进行相应处理,但是接收行情的动作还是要走的,不能因为要在进行完相应处理才继续接收行情。 要 满足条件即处理又要接收行情。 请问 用多线程该怎么做? 或者 给出出谋划划策。。
展开
4个回答
展开全部
其实youngking87的回答,这个思路是可以的了,可能是楼主你没明白到底什么意思。
我举个例子让你好理解一些吧。
汽车工厂,仓库,汽车销售公司。
汽车工厂会不停的制造车辆,销售公司会不停的把还在仓库里的车子拿出去卖
在这个例子里,汽车工厂是第一个线程,销售公司时第二个线程,他们同时进行。
而仓库,就相当于是一个List。
工厂制造一台车,List就增加一条数据,销售公司每卖出一台车,List就相应删除一条数据。
工厂不会因为销售公司不卖车,或者卖太快,而不继续生产
反过来,销售这边如果没有车卖了,他会一直查看仓库里有没有车。
所以回过来说解决思路,new一个List全局变量,保证两个线程都能访问你的List。
同时new两个线程,每个线程里面都是 while(true) 循环,是死循环,保证时时性。
第一个线程,在while语句里时时接收 行情数据,存到List
第二个线程,在while语句里,判断List是否有数据,有的话就循环处理List中的第一条,没有的话就一直判断。注意在这里不能用for语句循环list,因为list由于在第一个线程中数据量会不停增加,所以这里执行for语句的话可能会报错,每处理完成一条,就把List中那条数据删掉。如果想保存处理记录,可以写成log文件或者存入数据库,之后while语句继续执行。
我举个例子让你好理解一些吧。
汽车工厂,仓库,汽车销售公司。
汽车工厂会不停的制造车辆,销售公司会不停的把还在仓库里的车子拿出去卖
在这个例子里,汽车工厂是第一个线程,销售公司时第二个线程,他们同时进行。
而仓库,就相当于是一个List。
工厂制造一台车,List就增加一条数据,销售公司每卖出一台车,List就相应删除一条数据。
工厂不会因为销售公司不卖车,或者卖太快,而不继续生产
反过来,销售这边如果没有车卖了,他会一直查看仓库里有没有车。
所以回过来说解决思路,new一个List全局变量,保证两个线程都能访问你的List。
同时new两个线程,每个线程里面都是 while(true) 循环,是死循环,保证时时性。
第一个线程,在while语句里时时接收 行情数据,存到List
第二个线程,在while语句里,判断List是否有数据,有的话就循环处理List中的第一条,没有的话就一直判断。注意在这里不能用for语句循环list,因为list由于在第一个线程中数据量会不停增加,所以这里执行for语句的话可能会报错,每处理完成一条,就把List中那条数据删掉。如果想保存处理记录,可以写成log文件或者存入数据库,之后while语句继续执行。
展开全部
直接两个线程即可,然后再建立一个List用来存放数据,一个线程不停取数据放在list里,另一个线程从list里取数据处理即可。不过访问list里的数据时要做同步访问,以为那个是临界区。
追问
这样子可以? 因为 要处理的行情数据是实时的, 接收到行情就处理 但是接收行情数据的操作不能停止啊,两个线程执行的先后顺序不是 线程1执行,同步执行线程2 当线程2执行完后才继续执行线程一么? 怎么能让他们同时执行啊。。
追答
两个线程本来就并发执行的,你在线程1里就循环接受数据,接受到数据后,写入List里就好了,
线程2循环从List里取数据处理即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使用System.Threading.AutoResetEvent ,不过为下策,使用会造成代码阅读性下降,维护性下降。当然用好也很不错
追问
恩额,, 我试试看。。 没有用过你说的这个方法。。
追答
用优先级的方法肯定不行。系统的线程这部分完全不受任何人控制,什么优先级都有可能先跑,只是可能性大小的问题,所有用线程只能用阻塞这种方法来做到安全的控制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
并行执行就是两个Thread啦,你这里有优先极关系吗?
看说明 上好像是 处理数据最优先?
看说明 上好像是 处理数据最优先?
更多追问追答
追问
优先级就是行情数据接收到 在做处理 但是行情接收的动作要一直在走着,,因为是实时的数据。。 就是说 接收到行情数据后 就做处理 ,但是在做处理的同时 也要在做着接收的动作。。
感觉两个线程不好控制吧?
所以一直在查 并行的概念。。
追答
处理的数据,是接收来的?
如果所有接收的数据都处理完了,处理的行为还是否继续?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询