我在main函数中有一些代码,我希望在一个随机时间(例如100 ms)之后通过调用foo
之类的另一个函数来中断main函数。我该怎么做?
例如见下文:
void main()
{
intsruction 1;
intsruction 2;
intsruction 3;// for example if 100 ms ends after executing instruction
//3 the foo function should call after it, and after executing
//foo function, returns here and execute instruction 4
intsruction 4;
intsruction 5;
intsruction 6;
}
foo函数:
void foo()
{
instruction 7;
}
完成执行后,程序流程可以是:
intsruction 1;
intsruction 2;
intsruction 3;
intsruction 7;// foo
intsruction 4;
intsruction 5;
intsruction 6;
答案 0 :(得分:1)
您不能在某个时刻“中断”main,并在100ms后运行您的代码。相反,您可以做的是在100ms后运行您感兴趣的代码(例如,使用System.Timers.Timer
)。
之后,如果暂停主线程的原因是某些点之间的依赖关系,那么在中点检查两个结果: main 和 timers 并做出适当的选择。这称为推测执行,您可以在其中运行假设的if
分支的两种情况,并在选择适当的结果后运行。注意:该技术通常用于并行计算。
答案 1 :(得分:0)
或者更好的是,您可以使用Reactive Extensions并停止担心中断。使用Rx,您可以根据您的要求设置完全解耦的定时数据推送,将通知的客户端(您的程序)仅设置对Observable的订阅。您的代码看起来与此类似:
TheDataDesired.Subscribe(p=>{
//the variable p now has the data.
});
它类似于事件处理,但在某些方面更好,因为数据已经编组到订户的线程上。除此之外,对LINQ的广泛支持,你有一个非常好的解耦方式来获取数据,只需等待它到达。现在它不仅仅是数据,它可以是包括系统上事件处理在内的任何事物。
我们的好朋友Lee Campbell慷慨地提供了一个关于入门的非常好的教程:http://www.introtorx.com/content/v1.0.10621.0/01_WhyRx.html
比订阅你想要的东西和开展业务更容易吗?