2015-03-02 89 views
-2

我在主函数中有一些代码,并且我想通过在随机时间(例如100毫秒)之后调用另一个函数foo来中断主函数。我该如何做到这一点? 例如见下图:如何在C#中运行主函数一段时间后调用函数

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; 
+1

请详细说明。中断意味着阻止?在foo内部等待100毫秒或启动foo之前? – EngineerSpock 2015-03-02 15:11:24

+1

任何代码示例都可以帮助您更好地理解您的问题。 – 2015-03-02 15:11:36

+0

请再次参阅编辑。感谢 – 2015-03-02 15:34:33

回答

1

你不能只是 “中断” 主在某个时刻,在100ms后运行你的代码。相反,您可以使用而不是来运行100ms后感兴趣的代码(使用例如System.Timers.Timer)。 后,如果暂停主线程的原因是在某些点的之间的依赖关系,在,对于这两种结果点退房:主要定时器并作出适当的选择。这就是所谓的推测性执行,你运行你的假设if分支的两种情况,后选择适当的结果。注意:该技术通常用于并行计算。

+0

请注意,'a'Timer'不能在*精确* 100ms内运行某些代码。它的精度比1毫秒大得多。您可以在*大约* 100ms内运行一些代码。 – Servy 2015-03-02 15:23:38

+0

@Servy:正确,术语“精确”不是“技术上准确”,会改变为更现实的东西... – Tigran 2015-03-02 15:25:04

+0

请参阅编辑。谢谢 – 2015-03-02 15:34:50

0

或者更好,你可以使用Reactive Extensions并停止担心中断。使用Rx,您可以根据您的要求设置完全分离的定时推送数据,将会通知您的客户(您的程序)仅设置订阅Observable。您的代码将类似于此:

TheDataDesired.Subscribe(p=>{ 
     //the variable p now has the data. 
}); 

它类似于事件处理,但在某些方面更好,因为数据已经整理到用户的线程。再加上对LINQ的广泛支持,您可以通过等待它到达而获得非常好的解耦方式。现在它不仅仅是数据,它可以是任何事情,包括处理系统上的事件。

我们的好朋友李坎贝尔慷慨地提供了如何开始使用一个很好的教程:http://www.introtorx.com/content/v1.0.10621.0/01_WhyRx.html

什么比订阅你想要的东西,并要对您的业务更容易?

相关问题