比方说网络打印机 有5台 192.168.0.10 - 192.168.0.15
有台PC服务器 所有的打印请求都会放在数据库里3张表里(不同的表 打印的格式不一样)
现在要求就是做个打印服务器 循环采用多线程 向不同的打印机输出打印内容 打印成功后回填打印成功标志数据库大概是这样的表A
打印内容 打印机IP 打印时间表B
打印标题 打印内容 打印机IP 打印时间表C打印人 打印内容 打印机IP 打印时间=====================================================
以前早期的做法是单线程 循环表A记录 然后根据打印机IP输出内容 然后循环表B ... 表C 但是问题在于如果有台打印机异常 后面的任务就会一直等待
-------------------------------
现在需要改写这个程序 打算一台打印机就输出一条线程 这样互不干扰
我现在考虑的问题是
1. 对打印机先做循环 取出一共有多少台打印机 然后开启多少条线程 再去数据库里取相应的打印记录 对表A B C进行循环还是2. 先取出所有数据然后 看取出数据里有多少打印机 在开启相应的线程
比如
表A 有 3条记录 192.168.0.11 2条记录 192.168.0.15 1条记录
表B 有 5条记录 192.168.0.11 1条记录 192.168.0.10 3条记录 192.168.0.15 1条记录
表C 有10条记录 192.168.0.12 3条记录 192.168.0.13 5条记录 192.168.0.14 2条记录
感觉思维有点混乱 又是多线程 又是多表的 有没人做过类似的 帮忙梳理梳理思路
有台PC服务器 所有的打印请求都会放在数据库里3张表里(不同的表 打印的格式不一样)
现在要求就是做个打印服务器 循环采用多线程 向不同的打印机输出打印内容 打印成功后回填打印成功标志数据库大概是这样的表A
打印内容 打印机IP 打印时间表B
打印标题 打印内容 打印机IP 打印时间表C打印人 打印内容 打印机IP 打印时间=====================================================
以前早期的做法是单线程 循环表A记录 然后根据打印机IP输出内容 然后循环表B ... 表C 但是问题在于如果有台打印机异常 后面的任务就会一直等待
-------------------------------
现在需要改写这个程序 打算一台打印机就输出一条线程 这样互不干扰
我现在考虑的问题是
1. 对打印机先做循环 取出一共有多少台打印机 然后开启多少条线程 再去数据库里取相应的打印记录 对表A B C进行循环还是2. 先取出所有数据然后 看取出数据里有多少打印机 在开启相应的线程
比如
表A 有 3条记录 192.168.0.11 2条记录 192.168.0.15 1条记录
表B 有 5条记录 192.168.0.11 1条记录 192.168.0.10 3条记录 192.168.0.15 1条记录
表C 有10条记录 192.168.0.12 3条记录 192.168.0.13 5条记录 192.168.0.14 2条记录
感觉思维有点混乱 又是多线程 又是多表的 有没人做过类似的 帮忙梳理梳理思路
解决方案 »
- 用Live Writer发帖的问题
- 关于画FormBorderStyle.None;的界面
- 100分求 WINFORM程序如何屏蔽系统热键
- 急求javascript代码
- 一个比较菜鸟级的问题,帮忙指点~~ 谢谢各位~~~
- 求的桑拿洗浴管理系统及源码!
- 在DataGrid中选中一行,如何在DataSet中读取对应的数据!!!
- 动态加载CHECKBOXLIST后显示被选问题
- C# WinForm下菜单控件ContextMenuStrip的问题
- 登录问题出错,请高手指点
- Developer Express控件GridControl问题
- 用fileStream.write 将加密后的TS流数据写入文件,速度超级慢,跪求高手帮忙解决,标题一定要长
List<PosPrinter> poss = new List<PosPrinter>(); //主任务 创建个打印机集合 foreach (DataRow item in ds.Tables[0].Rows) //读取记录
{
PosPrinter pos = new PosPrinter() { ip = item["printIP"].ToString() };
if (!poss.Contains(pos)) //如果打印机集合里没有这台打印机 就添加
{
poss.Add(pos);
} //这里添加需要打印的内容 赋给打印机
pos.Works.Add(item["title"].ToString()); //这里好像感觉也有问题
}
//然后对打印机做循环
foreach (PosPrinter pos in poss)
{
//这里的线程 我总担心前一次的还没做完 又执行到这里又new 一个线程
Thread worker = new Thread(new ThreadStart(pos.PrintWork));
worker.Start();
}
PosPrinter 类代码
public class PosPrinter :IEquatable<PosPrinter>
{
public string ip { get; set; }
public List<string> Works = new List<string>(); //工作集合
BeiYangOPOS opos = new BeiYangOPOS();
public void PrintWork() {
//执行打印任务
}
}