如果我Threading.Timer.Change()连续两次调用,那么线程何时会运行?
例如:
myTimer.Change(5000, Timeout.Infinite);
// Only 2 seconds pass.
myTimer.Change(5000, Timeout.Infinite);
Run Code Online (Sandbox Code Playgroud)
在此之后,线程将在3秒或5秒内运行吗?
我希望答案是后者,每次调用都会重置计时器Change().如果没有,我需要找到解决方法.
我正在使用a System.Timers.Timer,我OnStart在ac #windows服务的方法中有如下代码.
timer = new Timer();
timer.Elapsed += timer_Elapsed;
timer.Enabled = true;
timer.Interval = 3600000;
timer.Start();
Run Code Online (Sandbox Code Playgroud)
这导致代码输入timer_Elapsed从我启动服务后的一小时开始每小时执行一次.有没有办法让它在我启动服务时执行,然后每小时执行一次?
调用的方法timer_Elapsed运行时间太长,无法直接调用它OnStart.
我有一个int值为60的lblCountdown.我想让lblCountDown的int值减少几秒,直到达到0.
这是我到目前为止:
private int counter = 60;
private void button1_Click(object sender, EventArgs e)
{
int counter = 60;
timer1 = new Timer();
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 1000; // 1 second
timer1.Start();
label1.Text = counter.ToString();
}
private void timer1_Tick(object sender, EventArgs e)
{
counter--;
if (counter == 0)
timer1.Stop();
label1.Text = counter.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我想澄清一下有关TimerTask的内容.如果您有以下代码:
timer.schedule(task, 60000);
Run Code Online (Sandbox Code Playgroud)
如果任务计划在接下来的1分钟内运行,那么任务对象是否已在执行?
因为在我的代码中某处我调用了task.cancel()但似乎调用并没有阻止
要执行的任务.我甚至记录了来自调用的返回值,它返回false.
当我阅读取消方法的文档时,我想到了我的问题:
取消TimerTask并将其从Timer的队列中删除.通常,如果调用没有阻止TimerTask至少运行一次,则返回false.后续调用无效.如果调用阻止了计划执行,则返回true,否则返回false.
我相信我在1分钟的延迟之前打电话给cancel().但是如何取消返回false,
是[任务]已经执行了吗?
希望你能给我提供线索/提示甚至解释.谢谢!
正如问题主题所说.我在Delphi中有一个控制台应用程序,它包含一个TTimer变量.我想要做的是为事件分配一个事件处理程序TTimer.OnTimer.我是Delphi的新手,我以前使用C#并且事件处理程序添加到事件是完全不同的.我发现一个人并不是简单地将一个过程作为一个处理程序分配给事件,你必须创建一个带有一个方法的虚拟类,该方法将成为处理程序,然后将此方法分配给该事件.这是我目前的代码:
program TimerTest;
{$APPTYPE CONSOLE}
uses
SysUtils,
extctrls;
type
TEventHandlers = class
procedure OnTimerTick(Sender : TObject);
end;
var
Timer : TTimer;
EventHandlers : TEventHandlers;
procedure TEventHandlers.OnTimerTick(Sender : TObject);
begin
writeln('Hello from TimerTick event');
end;
var
dummy:string;
begin
EventHandlers := TEventHandlers.Create();
Timer := TTimer.Create(nil);
Timer.Enabled := false;
Timer.Interval := 1000;
Timer.OnTimer := EventHandlers.OnTimerTick;
Timer.Enabled := true;
readln(dummy);
end.
Run Code Online (Sandbox Code Playgroud)
这似乎对我来说是正确的,但由于某种原因它不起作用.
编辑
看起来该TTimer组件将无法工作,因为控制台应用程序没有消息循环.有没有办法在我的应用程序中创建计时器?
我需要在一段时间后从当前活动开始活动.我编码如下.
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
new Timer().schedule(new TimerTask(){
public void run() {
startActivity(new Intent(FirstActivity.this, SecondActivity.class));
}
}, 2000);
}
Run Code Online (Sandbox Code Playgroud)
但它不工作..继续崩溃..我的方法是否正确?我的清单文件如下
`
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="@string/title_activity_first" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.first.FirstActivity" />
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
我有一个代码,显示我运行我的应用程序时的当前日期和时间
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
Run Code Online (Sandbox Code Playgroud)
现在它告诉我:2012/12/11 00:36:53当我运行它.
但是我希望它能算出运行它的时间.
所以现在通过示例,当我在00:37:53运行时,它显示了这个时间,但是我想要00:37:53开始,我在00:40:55停止运行它.我希望它能告诉我00:37:53,00:37:54,00:37:55等等.
现在我该怎么做?
当使用add_timerAPI 创建的计时器到期并且计时器结构分配的功能运行时,它在什么上下文中运行?它是中断上下文还是某些内核进程上下文?
我想在GCD块中创建一个计时器(每2秒触发一次并调用一个方法)将其用作后台任务.但是,我认为计时器永远不会发火.这是我的代码:
- (void)startMessaging
{
BOOL queue = YES;
dispatch_queue_t _queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, _queue);
dispatch_source_set_timer(timerSource, dispatch_walltime(NULL, 0), 2ull * NSEC_PER_SEC,1ull * NSEC_PER_SEC );
dispatch_source_set_event_handler(timerSource, ^{
if (queue) {
[self observeNewMsgs];
}
});
dispatch_resume(timerSource);
}
- (void)observeNewMsgs
{
NSLog(@"JUST TO TEST");
// Staff code...
}
Run Code Online (Sandbox Code Playgroud)
那么这有什么问题呢?我怎样才能解决这个问题?
到目前为止,我发现的最佳解决方案是使用该sleep()功能.我想在计时器到期事件发生时运行我自己的回调函数.是否有任何事件驱动的方式去做?
from time import sleep
# Sleep for a minute
time.sleep(60)
Run Code Online (Sandbox Code Playgroud)