2015-03-02 90 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

什麼比訂閱你想要的東西,並要對您的業務更容易?

相關問題