while(true)
{
if(DataTime.Now<startTime)
{
bool waiting=true;
}
// 下面就是发出处理消息
}
发现这样做很占用系统资源,请高手指点一下,如何解决这个问题,谢谢。
9 个解决方案
#1
怎么能这样写代码?
如果需要等待,使用sleep呀。
把你的代码全贴出来。
如果需要等待,使用sleep呀。
把你的代码全贴出来。
#2
这样做当然很占资源了.
考虑使用System.Threading.Timer.
考虑使用System.Threading.Timer.
#3
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
bool waitingStart=true;
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
bool waitingEnd=true;
}
this._tm.timeUp();
}
}
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
bool waitingStart=true;
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
bool waitingEnd=true;
}
this._tm.timeUp();
}
}
#4
上述代码主要实现的功能是:给定一个周期,就是程序中的timeSetting.frequency,每隔这么一段时间发一个消息。我的思路是用一个线程不断系统时间,如果到时间就法消息,如果时间不到,就等待。大部分时间是在等待状态,我不知如何实现这种功能,于是就做了一个死循环,请高手指点一下如何处理这种问题,感激不尽。
#5
使用Timer控件,很方便!!
#6
使用Timer控件,在Elasped的事件里处理你的消息
重要的是将Timer控件的interval(是以毫秒为单位)设为你的timeSetting.frequency。
重要的是将Timer控件的interval(是以毫秒为单位)设为你的timeSetting.frequency。
#7
Thread.sleep(50)
..................
..................
#8
还是不是很明白,先暂时修改为以下:
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
Threading.Sleep(50);
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
Threading.Sleep(50);
}
this._tm.timeUp();
}
}
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
Threading.Sleep(50);
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
Threading.Sleep(50);
}
this._tm.timeUp();
}
}
#9
谢谢你,笨牛,呵呵。
#1
怎么能这样写代码?
如果需要等待,使用sleep呀。
把你的代码全贴出来。
如果需要等待,使用sleep呀。
把你的代码全贴出来。
#2
这样做当然很占资源了.
考虑使用System.Threading.Timer.
考虑使用System.Threading.Timer.
#3
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
bool waitingStart=true;
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
bool waitingEnd=true;
}
this._tm.timeUp();
}
}
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
bool waitingStart=true;
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
bool waitingEnd=true;
}
this._tm.timeUp();
}
}
#4
上述代码主要实现的功能是:给定一个周期,就是程序中的timeSetting.frequency,每隔这么一段时间发一个消息。我的思路是用一个线程不断系统时间,如果到时间就法消息,如果时间不到,就等待。大部分时间是在等待状态,我不知如何实现这种功能,于是就做了一个死循环,请高手指点一下如何处理这种问题,感激不尽。
#5
使用Timer控件,很方便!!
#6
使用Timer控件,在Elasped的事件里处理你的消息
重要的是将Timer控件的interval(是以毫秒为单位)设为你的timeSetting.frequency。
重要的是将Timer控件的interval(是以毫秒为单位)设为你的timeSetting.frequency。
#7
Thread.sleep(50)
..................
..................
#8
还是不是很明白,先暂时修改为以下:
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
Threading.Sleep(50);
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
Threading.Sleep(50);
}
this._tm.timeUp();
}
}
private void threadStart()
{
// 计算是否到起始时间
DateTime temp=base.timeSetting.startTime;//temp表示起始时间
while(true)
{
Timer.TimeManagerSetting setting=base.timeSetting;
while(temp>DateTime.Now)
{
// 等待
Threading.Sleep(50);
}
// 计算是否到结束时间
temp=temp+timeSetting.frequency;// temp表结束时间
while(temp>DateTime.Now)
{
Threading.Sleep(50);
}
this._tm.timeUp();
}
}
#9
谢谢你,笨牛,呵呵。