多线程问题!是否可以降低线程的优先级,如何降低。
小弟在用C#的stmpclient类做一个发送邮件的小程序,我将console主线程用来接收用户输入,如果输入start,check线程就启动,不停得扫描数据库,检查是否有信件可以发送,如果有,就在该线程中调用stmpclient.sentasync()方法发送信件。但是我发现,如果我的check线程不处于挂起状态,邮件就发送不出去,一旦check线程挂起或者我中止程序,邮件就能够发出去。我怀疑check线程的优先级太高,又想在不中止程序或者check线程的情况下能够顺利的发送邮件,由此想问大家标题上的问题。谢谢谢谢。
------解决方案--------------------1.最好不要修改线程的优先级,虽然确实可以修改.因为修改这个会给你带来意想不到的问题.(如果知道操作系统内优先级排队的原则就知道了.)
2.在check线程内使用Sleep(20)来搞定,一般加入以后估计就不会有问题了.
3.如果第二个没有起作用,那么建议楼主加一个Mutex信号量,在发送邮件的时候获取该信号量,从而是check线程暂停.
------解决方案--------------------TO:是否可以降低线程的优先级,如何降低
try..
threadTwo.Priority = ThreadPriority.BelowNormal;
------解决方案--------------------关于ThreadPriority,请参见:
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref12/html/T_System_Threading_ThreadPriority.htm
AboveNormal 可以将 Thread 安排在具有 Highest 优先级的线程之后,在具有 Normal 优先级的线程之前。
BelowNormal 可以将 Thread 安排在具有 Normal 优先级的线程之后,在具有 Lowest 优先级的线程之前。
Highest 可以将 Thread 安排在具有任何其他优先级的线程之前。
Lowest 可以将 Thread 安排在具有任何其他优先级的线程之后。
Normal 可以将 Thread 安排在具有 AboveNormal 优先级的线程之后,在具有 BelowNormal 优先级的线程之前。默认情况下,线程具有 Normal 优先级。
------解决方案--------------------http://book.csdn.net/bookfiles/16/100165453.shtml
http://blog.csdn.net/lubingli2007/archive/2006/05/29/760239.aspx