2011-05-10 16 views
17

के लिए पाश निष्पादित करने के लिए कैसे कैसे मैं निर्दिष्ट समयविशिष्ट समय

Timeinsecond = 600 

int time = 0; 
while (Timeinsecond > time) 
{ 
    // do something here 
} 

कैसे मैं समय varaible सेट कर सकते हैं, अगर मैं टाइमर वस्तु शुरू उपयोग करें और यह विधि रोक सकता है के लिए किसी विशेष पाश निष्पादित कर सकते हैं doesnot मुझे सेकंड में समय लौट

सादर NewDev

उत्तर

15

आप उपयोग में आसानी चाहते हैं:

// Could use DateTime.Now, but we don't care about time zones - just elapsed time 
// Also, UtcNow has slightly better performance 
var startTime = DateTime.UtcNow; 

while(DateTime.UtcNow - startTime < TimeSpan.FromMinutes(10)) 
{ 
    // Execute your loop here... 
} 
: - आप मजबूत सटीकता की आवश्यकताओं की जरूरत नहीं हैहै (सच मिलीसेकंड स्तर सटीकता इस तरह प्रति सेकंड वीडियो गेम, या इसी तरह वास्तविक समय सिमुलेशन एक उच्च फ्रेम लेखन के रूप में), तो आप बस System.DateTime संरचना का उपयोग कर सकते

TimeSpan.FromMinutes बदले समय की जो कुछ अवधि के लिए आप की आवश्यकता होती है, सेकंड, मिनट, आदि

, एक वेब सेवा की तरह कुछ बुला समय की एक छोटी राशि के लिए उपयोगकर्ता के लिए कुछ प्रदर्शित करने, या जाँच डिस्क पर फ़ाइलों के मामले में होने की , मैं इसे विशेष रूप से उपयोग करता हूं।

आप उच्च सटीकता चाहते हैं:

Stopwatch वर्ग के लिए देखो, और Elapsed सदस्य की जाँच करें। इसका उपयोग करना थोड़ा कठिन है, क्योंकि आपको इसे शुरू करना है, और it has some bugs which will cause it to sometimes go negative, लेकिन यदि आपको वास्तविक मिलीसेकंड-स्तर सटीकता की आवश्यकता है तो यह उपयोगी है।

इसका इस्तेमाल करने के लिए:

var stopwatch = new Stopwatch(); 
stopwatch.Start(); 

while(stopwatch.Elapsed < TimeSpan.FromSeconds(5)) 
{ 
    // Execute your loop here... 
} 
+9

'DateTime.Now' धीमी गति से (पर 1000ns के बारे में है मेरी मशीन)। आपको 'डेटटाइम.यूटीसीएनओ' का उपयोग करना चाहिए क्योंकि यह टाइमज़ोन रूपांतरण करने के कारण लगभग 100 गुना तेज है। – Gabe

+1

@Gabe: अच्छी जानकारी। मुझे कुछ सिखाने के लिए धन्यवाद :) जवाब संपादित करना ... –

38

हो सकता है निम्नलिखित में मदद मिलेगी:

Stopwatch s = new Stopwatch(); 
    s.Start(); 
    while (s.Elapsed < TimeSpan.FromSeconds(600)) 
    { 
     // 
    } 

    s.Stop(); 
0

शुरू रोक के लिए एक समारोह है, और बीता हुआ समय बनाएं इस प्रकार है:

Class CustomTimer 
{ 
    private DateTime startTime; 
    private DateTime stopTime; 
    private bool running = false; 

    public void Start() 
    { 
     this.startTime = DateTime.Now; 
     this.running = true; 
    } 

    public void Stop() 
    { 
     this.stopTime = DateTime.Now; 
     this.running = false; 
    } 

    //this will return time elapsed in seconds 
    public double GetElapsedTimeSecs() 
    { 
     TimeSpan interval; 

     if (running) 
      interval = DateTime.Now - startTime; 
     else 
      interval = stopTime - startTime; 

     return interval.TotalSeconds; 
    } 

} 

अब आपके foreach लूप के अंतर्गत निम्न कार्य करें:

CustomTimer ct = new CustomTimer(); 
    ct.Start(); 
    // put your code here 
    ct.Stop(); 
    //timeinsecond variable will be set to time seconds for your execution. 
    double timeinseconds=ct.GetElapsedTime(); 
-2

यह बदसूरत है .... लेकिन आप इस कोशिश कर सकते: इस तरह के एक महंगी आपरेशन के बजाय

DateTime currentTime = DateTime.Now; 
DateTime future = currentTime.AddSeconds(5); 
while (future > currentTime) 
{ 
    // Do something here .... 
    currentTime = DateTime.Now; 
    // future = currentTime.AddSeconds(5); 
} 
+0

डाउनवॉट्स क्यों? –

-2

मैं इस सलाह देते हैं:

using System.Threading; 

Thread.Sleep(600000); 
+0

मुख्य धागे को सोने के लिए एक अच्छा विचार नहीं है। संसाधनों का अपशिष्ट और सभी अच्छे अभ्यासों पर नहीं। –

+0

मैं दृढ़ता से सहमत हूं, हालांकि बैठना संसाधनों को चलाने से बैठना और इंतजार करना बेहतर है, प्रश्न स्वयं अकादमिक है। –

0
using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Accord.Video.FFMPEG; 


namespace TimerScratchPad 
{ 
    public partial class Form1 : Form 
    { 
     VideoFileWriter writer = new VideoFileWriter(); 
     int second = 0; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      writer.VideoCodec = VideoCodec.H264; 
      writer.Width = Screen.PrimaryScreen.Bounds.Width; 
      writer.Height = Screen.PrimaryScreen.Bounds.Height; 
      writer.BitRate = 1000000; 
      writer.Open("D:/DemoVideo.mp4"); 

      RecordTimer.Interval = 40; 
      RecordTimer.Start(); 

     } 

     private void RecordTimer_Tick(object sender, EventArgs e) 
     { 
      Rectangle bounds = Screen.GetBounds(Point.Empty); 
      using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) 
      { 
       using (Graphics g = Graphics.FromImage(bitmap)) 
       { 
        g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size); 
       } 
       writer.WriteVideoFrame(bitmap); 
      } 

      textBox1.Text = RecordTimer.ToString(); 
      second ++; 
      if(second > 1500) 
      { 
       RecordTimer.Stop(); 
       RecordTimer.Dispose(); 
       writer.Close(); 
       writer.Dispose(); 
      } 
     } 
    } 
} 
+0

यह कोड अधिक सिस्टम संसाधनों को अधिक उपभोग किए बिना चलाएगा और जब आप लूप के दौरान चलते समय धीमा सिस्टम का अनुभव कभी नहीं करेंगे, तो यह कोड स्क्रीन शॉट्स लेगा और प्रत्येक 40 मिलीसेकंड के लिए वीडियो फ़ाइल में लिख देगा यानी 24FPS –

संबंधित मुद्दे