日期:2014-05-20  浏览次数:20778 次

###########################这种windows服务结构怎么写比较好,涉及到多线程,与用户交互等问题?
服务开启后,读一个文件,根据文件来启动线程,我的文件定义的是记录的序列

比如文件中的内容是:

记录1
记录2
......
记录10

服务就相应的启动10个线程,线程做的工作是不停地实时(每3秒)取实时数据(怎么取我知道,比如线程1取记录1中定义的),来做一些处理,比如判断当前实时值是否越限,没有越限,就每三秒重复取,重复判断,如果越限,就弹出一个对话框(告诉用户某个值越限了,用户就可以来处理它,比如中止这个判断进程),但是线程还是同时继续在检测,如果又不越限了,刚才那个对话框就会被线程关闭(也就是说用户还没有处理,这个越限自己结束了)

几个问题:
1.这个读文件的操作应该写在服务的构造函数中还是OnStart函数中,还是在OnStart函数中启动一个线程来读文件?

2.我把文件读到缓冲区,再逐个来启动线程,应该有个专门用来启动线程的线程,对吗?

3.根据记录来启动的线程数要考虑到100个这个量,每个线程都是互不相关的,比如线程1检测到线程1的实时值越限,线程二也可能同时检测到线程2的实时值越限,都会同时有各自的处理,怎么对这100个线程管理?

这样一个服务,应该有个怎么样的结构,目前还没有感觉,请给出建议!谢谢!

------解决方案--------------------
2个线程吧...

1个主线程负责调用程...检测等工作...

第二个线程负责开启线程...

不过貌似不好管理...初看乱写的...抛砖引玉而已...
------解决方案--------------------
先顶一下
------解决方案--------------------
up
------解决方案--------------------
关注!
------解决方案--------------------
> > 1.这个读文件的操作应该写在服务的构造函数中还是OnStart函数中,
> > 还是在OnStart函数中启动一个线程来读文件?

可以再OnStart里面直接读文件,甚至可以在OnStart里面直接启动下面需要的线程。

> > 2.我把文件读到缓冲区,再逐个来启动线程,应该有个专门用来启动线程的线程,对吗?

不需要,可以在OnStart里面做。

> > 3.根据记录来启动的线程数要考虑到100个这个量,每个线程都是互不相关的,
> > 比如线程1检测到线程1的实时值越限,线程二也可能同时检测到线程2的实时值越限,
> > 都会同时有各自的处理,怎么对这100个线程管理?

线程之间没有共享资源或者通信的话不需要特殊的管理。
------解决方案--------------------
很奇怪
我试了下
停止服务后再启动,还是会调用构造函数啊

这个肯定呀,停止服务就是相当于关闭程序。
------解决方案--------------------
搂主可以参考Serv-U