首页 新闻 会员 周边

关于C#多线程实现打印功能的一个问题

1
悬赏园豆:30 [已关闭问题] 关闭于 2010-11-08 17:48

比如我有一个数据库,有一张表,里面的数据可以根据表里面的打印机ID来查找对应网络上的打印机进行打印,如果当前打印机状态为1的话就不能打印,为0就可以打印,比如一个打印机有多个任务的话,因为是多线程,打印机的状态一改为0的话,所以要打印的任务就全部来执行打印了,但是同时又只能容纳一个线程进行打印,所以就造成了矛盾(用线程队列也不行,因为所以有打印任务并不是针对一个打印机的,还有别的打印任务,也不能固定打印机的台数,因为打印机信息是从数据库读出来的,有可以以后会加或减或换)

看看我的眼神的主页 看看我的眼神 | 初学一级 | 园豆:140
提问于:2010-10-31 12:47
< >
分享
所有回答(2)
0

用事物来做,读取的那个事物判断如果状态为0,则返回0,并在事物中将状态重新置1.

eaglet | 园豆:17139 (专家六级) | 2010-11-01 07:32
0

觉得是不是可以将打印机配置信息缓存到内存中,设计两个类 

 

class Print
{  
int m_state;

bool Enable()
{

     if(m_state==0)
     {
lock(this)
{
if(m_state==0)
{
m_sate=1;
return true;
}
}
}
return false;
}
}
class PrintCollection
{
bool Print(int id)
{
Print print
=this[id];
int testCount=0;
bool result=false;
while(testCount<5)
{
testCount
++;
if(!print.Enable()) {Sleep(5000); continue;}
//打印
result=true;
break;
}
return result;
}
}

 

 

通过打印Id来选择打印机信息,最多可以尝试获取n次

wgz | 园豆:1254 (小虾三级) | 2010-11-01 09:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册