使用System.Threading中的timer
Timer tmr = new(new TimerCallBack(DoTimer), state, 0, 100);void DoTimer(object state)
{
DOSOMETHING();
}DOSOMETHING()的操作时间比timer的时间间隔长,就是说第一次执行DoTimer后,DOSOMETHING开始,当第二次再执行DoTimer时,DOSOMETHING还没有执行完.
怎么做才能在DOSOMETHING执行的时候,再次执行DoTimer时不会同时有两个DOSOMETHING在执行.
Timer tmr = new(new TimerCallBack(DoTimer), state, 0, 100);void DoTimer(object state)
{
DOSOMETHING();
}DOSOMETHING()的操作时间比timer的时间间隔长,就是说第一次执行DoTimer后,DOSOMETHING开始,当第二次再执行DoTimer时,DOSOMETHING还没有执行完.
怎么做才能在DOSOMETHING执行的时候,再次执行DoTimer时不会同时有两个DOSOMETHING在执行.
{
mx.WaitOne();
DOSOMETHING();
mx.ReleaseMutex();
}
{
tmr.stop();
DOSOMETHING();
tmr.start();
}
class Program
{
static void Main()
{
Timer tmr = new Timer(new TimerCallback(DoTimer), null , 0, 1000);
Console.Read();
}
//static Mutex mx = new Mutex();
static void DoTimer(object state)
{
//mx.WaitOne();
Console.WriteLine("test begin..");
Thread.Sleep(4000);
Console.WriteLine("test end...");
//mx.ReleaseMutex();
} }输出如下:
test begin..
test begin..
test begin..
test begin..
test begin..
test end..
test begin..
.....
当加上互斥量时:
class Program
{
static void Main()
{
Timer tmr = new Timer(new TimerCallback(DoTimer), null , 0, 1000);
Console.Read();
}
static Mutex mx = new Mutex();
static void DoTimer(object state)
{
mx.WaitOne();
Console.WriteLine("test begin..");
Thread.Sleep(4000);
Console.WriteLine("test end...");
mx.ReleaseMutex();
} }
输出如下所示:test begin..
test end..
test begin..
test end ..
test begin..
test end ..
.........
我的dosomething是一个关于ic卡读写卡的操作.调用的是第三方的动态库.因为不知道卡机上什么时候有ic卡,于是就设了个定时器过段时间发个指令出去读写一次卡.好像对用Mutex实现互斥没有太大的影响吧....楼主用Mutex实现不了吗?