1

このようなプログラムを作りたかったのです。
毎分、時刻は。の形式で印刷する必要があります h:m
5分ごとに「break」と出力
されます。これは24時間継続する必要があります。このように

0:0
0:1
0:2
0:3
0:4
break
0:6
0:7
0:8
0:9
break
0 :11



23:59

私はそれを解決するプログラムが付属していました..しかし、私は使用したことがないDateTimeか、時間関数を使用していませんでした、私はThread.Sleep毎回1分間のdalay印刷を使用していました...私はそれを解決する以外の方法を使用したかったThread.Sleep...だからお願いしますガイドしてください..(私の悪い英語でごめんなさい)


これは私がでした方法Thread.Sleepです。
他の解決策を教えてください

using System;
using System.Threading;

class try22
{
    public static void Main()
    {
        for(int i=0;i<24;i++)
        {
            for(int j=0;j<60;j++)
            { 
                if(j%5 != 0 || (j == 0 && i == 0))
                {
                    Thread.Sleep(20);        
                    Console.WriteLine(i+":"+j);
                }
                else if(j%5 == 0 )
                {
                    Thread.Sleep(20);
                    Console.WriteLine("break");
                }
            }
        }
     }
}




みんなありがとう私は私の問題で配列番号の代わりに実際の日付を使用する解決策を思いついた

imタイマーで奇妙なエラーが発生する..:(だから私はthread.sleepitslefを使用しました

using System;
using System.Threading;

class try22
{
    public static void Main()
    { 
        DateTime dt1 = new DateTime();
        dt1 = DateTime.ParseExact("0:0", "H:m",null);
        int cford=dt1.Day+1;
        for (; dt1.Day!=cford; )
        {
           dt1 = addm(dt1);
           Console.WriteLine(dts(dt1));
           Thread.Sleep(60000);
        }
    }
    public static string dts(DateTime dt)
    {

        string tmp = dt.ToString("H:m");
        if (dt.Minute % 5 == 0)
            return "BREAK";
        else
            return tmp;
    }
    public static DateTime addm(DateTime dt)
    {
        return dt.AddMinutes(1);
    }
}
4

3 に答える 3

1

これらのうち、あなたが求められたのはどれですか?

  1. 現在の時刻を 1 分に 1 回表示する
  2. 毎分の開始時にアラームのように現在時刻を表示

1 と仮定すると、正しい方向へのヒントがいくつかあります (どちらの方法でも役立つはずです)。

  1. を使用して、現在の日付と時刻をDateTimeオブジェクトとして取得できます。DateTime.Now
  2. DateTimeオブジェクトは、 を使用してカスタム文字列出力を返すことができます.ToString("format")
  3. 形式は、カスタムの日付と時刻の形式文字列で指定されます。たとえば、現在の時間を 24 時間制 (先行ゼロなし) で取得するには、 を使用できますDateTime.Now.ToString("H")
  4. 参照に従って、フォーマットに文字列リテラル (未処理の文字列) を含めることができます。たとえば、DateTime.Now.ToString("'Hour is: 'H")戻りますHour is: 6
  5. DateTimeオブジェクトの「分」の値をintusingとして取得できます.Minute。例えば、int minute = DateTime.Now.Minute;
  6. コードを定期的に実行したい場合、1 つの方法はそれを独自のメソッドに移動してから、次のSystem.Threading.Timerようにセットアップすることです。

    void SomeMethod(object state) { /* DO STUFF HERE */ }
    
    // Initialise the timer in your main() method 
    // As per MSDN for System.Threading.Timer, first number (0) is start delay.
    // Second number (60000) is interval in milliseconds (60 seconds)
    // This will cause SomeMethod to be called once every 60 seconds starting now.
    Timer timer = new Timer(new TimerCallback(SomeMethod), null, 0, 60000);
    
  7. 作成後すぐにアプリケーションの終了を停止する必要がありますTimer(そうしないと、実行できなくなります)。コマンド ライン アプリケーションでこれを行う簡単な方法の 1 つは、ユーザー入力を待機Console.Read()するメソッドの最後に a を配置することです。Main()

于 2012-07-06T03:58:01.830 に答える
1

スレッドの代わりにタイマーを使用しました

 class Program
    {
        private static System.Timers.Timer aTimer;
        static int j = 0;
        static int i = 0;
        public static void Main()
        {         
            // Create a timer with a Minute interval.
            aTimer = new System.Timers.Timer(60000);

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Set the Interval to 1 Minute (60000 milliseconds).
            aTimer.Interval = 60000;
            aTimer.Enabled = true;

            Console.WriteLine("Press the Enter key to exit the program.");
            Console.WriteLine(0 + ":" + 0);
            Console.ReadLine();
        }

        // Specify what you want to happen when the Elapsed event is 
        // raised.
        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {            
            j++;
            if (j == 60)
            {
                Console.WriteLine("break");
                j = 1;
                i = i + 1;
            }
            if (i == 24)
            {
                i = 0;
            }

            if (j % 5 != 0 || (j == 0))
            {                              
                Console.WriteLine(i + ":" + j);
            }
            else if (j % 5 == 0)
            {
                Console.WriteLine("break");
            }
        }
    }
于 2012-07-06T08:31:42.507 に答える
0

実際のシステム時間を使用して開始したい天気、またはプログラムの実行が開始されてからの時間だけを使用したい天気がわかりません。私が投稿している解決策は、プログラムが開始されてからの時間を使用しています。

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;
namespace ConsoleApplication1
{
   class Program
 {
    TimeSpan tt;
    static void Main(string[] args)
    {
        Program p = new Program();
        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(p.run));
        t.Start();
        while (true) ;
    }

    void run()
    {
        tt=new TimeSpan(0,1,0);
        //Timer interval decides when even will be fired.
        Timer t = new Timer(60000);
        t.AutoReset = true;
        t.Elapsed += new ElapsedEventHandler(t_Elapsed);
        t.Start();

    }

    public void t_Elapsed(object sender, EventArgs e)
    {

        if (tt.Minutes % 5 == 0)
            Console.WriteLine("Break");
        Console.WriteLine(tt.Hours.ToString()+":"+tt.Minutes.ToString());
        tt = tt.Add(new TimeSpan(0, 1, 0));
    }
}
}
于 2012-07-06T04:49:29.683 に答える