C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.79372 の関連記事表示

<< 0 >>
■79372  一定時刻での割り込み
□投稿者/ 超初心者 -(2016/03/26(Sat) 20:56:41)

    分類:[VB.NET/VB2005 以降] 

    あくまでも基点は時計の00秒です。
    その基点から30秒や1分、1分30秒 毎にある処理をしたいと思います。
    どのようにすれば良いのか教えてください。
親記事 /過去ログ135より / 関連記事表示
削除チェック/

■79374  Re[1]: 一定時刻での割り込み
□投稿者/ shu -(2016/03/27(Sun) 01:51:02)
    No79372 (超初心者 さん) に返信

    Timerの使い方は分かるのでしょうか?

    00秒からの30秒単位の補正をどのようにしたらよいか分からないということでしょうか?

    後者であればTimerとスレッドの組み合わせを行うとよいと思います。
    Timerイベントで現在の秒数を取得して別スレッドを起こしずれの分待機させて処理を行わせる
    といった感じでしょうか?
    またはTimer間隔を100ms程度にしておいて00秒,30秒のときに処理を行い他のときは処理をしないという
    方法でもよいかと思います。
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79377  Re[2]: 一定時刻での割り込み
□投稿者/ 超初心者 -(2016/03/27(Sun) 23:22:53)
    2016/03/27(Sun) 23:37:38 編集(投稿者)

    No79374 (shu さん) に返信

    ありがとうございます。

    これは30秒毎にとある処理をしょうとするものです。
    これで合ってるでしょうか?

    Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Do
    If Mid(DateTime.Now, 18, 2) = "00" Then '時計の00秒になればスタート
    MessageBox.Show(DateTime.Now.ToString()) 'ここでとある処理を実行
    System.Threading.Thread.Sleep(30000) '30秒のスリープ
    MessageBox.Show(DateTime.Now.ToString()) 'ここでとある処理を実行
    End If
    Loop
    End Sub
    End Class
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79378  Re[3]: 一定時刻での割り込み
□投稿者/ shu -(2016/03/28(Mon) 07:24:34)
    No79377 (超初心者 さん) に返信

    こういう無限ループを使ってスリープさせる方法は
    Windows上では使うべきではありません。Timerなどを
    使うようにした方がよいです。
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79383  Re[4]: 一定時刻での割り込み
□投稿者/ 超初心者 -(2016/03/28(Mon) 11:23:14)
    No79378 (shu さん) に返信
    
    ありがとうございます。
    
    無限ループは禁じ手なのですね。
    一応作ってみました。
    ご指導の程お願いします。
    
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        End Sub
        'タイマーを開始
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()             '果たしてこれも要るのかは不明です。
            Timer1.Enabled = True
        End Sub
        'タイマーを停止
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Timer1.Stop()              '果たしてこれも要るのかは不明です。
            Timer1.Enabled = False
        End Sub
        '時計の30秒毎にとある処理を実行
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            If DateTime.Now.Second = 0 Or DateTime.Now.Second = 30 Then
                Timer1.Enabled = False
                MessageBox.Show(DateTime.Now.ToString())  'ここでとある処理を実行
                Timer1.Enabled = True
            End If
        End Sub
    End Class
    
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79385  Re[5]: 一定時刻での割り込み
□投稿者/ kiku -(2016/03/28(Mon) 11:59:41)
    No79383 (超初心者 さん) に返信

    Timer1.Intervalをいくつに設定するかを考える必要があります。

    Timer1.Intervalを1000(1秒)に設定した場合、
    ぴったり1秒間隔でイベントが発生しないため、
    例えば下記のようなことが発生することが考えられます。
     前回、29秒900ミリ秒。
     今回、31秒100ミリ秒。
    つまり、30秒にならない可能性が出てきます。

    なので、Timer1.Intervalを1秒より充分小さい値にする必要があります。
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79400  Re[5]: 一定時刻での割り込み
□投稿者/ shu -(2016/03/30(Wed) 11:12:10)
    2016/03/30(Wed) 11:12:22 編集(投稿者)

    No79383 (超初心者 さん) に返信

    > Timer1.Start() '果たしてこれも要るのかは不明です。
    > Timer1.Enabled = True
    どちらかというとStartだけの方がよいと思います。


    > Timer1.Stop() '果たしてこれも要るのかは不明です。
    > Timer1.Enabled = False
    どちらかというとStopだけの方がよいと思います。
記事No.79372 のレス / END /過去ログ135より / 関連記事表示
削除チェック/

■79431  Re[6]: 一定時刻での割り込み
□投稿者/ 超初心者 -(2016/04/01(Fri) 17:31:08)
    No79400 (shu さん) に返信

    ありがとうございます。

    Timer1.Enabled は使わないようにします。

    > どちらかというとStartだけの方がよいと思います。
    > どちらかというとStopだけの方がよいと思います。
記事No.79372 のレス / END /過去ログ135より / 関連記事表示
削除チェック/

■79382  Re[4]: 一定時刻での割り込み
□投稿者/ 774RR -(2016/03/28(Mon) 10:48:23)
    UI スレッド (イベントハンドラ) にて Sleep するということは、その間
    ・一切の操作に反応させない(してはいけない)
    ・一切の画面更新を行わない
    というプログラマの意思表明であるため、そういう書き方はダメ
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=79158
    典型的「応答無し」になる例だ。

    自分でタイミングをコード記述するのでなく「タスクスケジューラ」でなんとかならないか考察してみよう。
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79384  Re[5]: 一定時刻での割り込み
□投稿者/ 超初心者 -(2016/03/28(Mon) 11:32:15)
    No79382 (774RR さん) に返信

    ありがとうございます。

    レスのタイミングが前後してしまったようです。
    勉強させていただきます。

    > UI スレッド (イベントハンドラ) にて Sleep するということは、その間
    > ・一切の操作に反応させない(してはいけない)
    > ・一切の画面更新を行わない
    > というプログラマの意思表明であるため、そういう書き方はダメ
    > http://bbs.wankuma.com/index.cgi?mode=al2&namber=79158
    > 典型的「応答無し」になる例だ。
    >
    > 自分でタイミングをコード記述するのでなく「タスクスケジューラ」でなんとかならないか考察してみよう。
    >
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79386  Re[6]: 一定時刻での割り込み
□投稿者/ 774RR -(2016/03/28(Mon) 12:29:17)
    組み込み系をやっているとこういうのが気になるのだが

    DateTime.Now は毎回評価されるプロパティなので
    > If DateTime.Now.Second = 0 Or DateTime.Now.Second = 30 Then
    1回目の Second が 30 で、2回目の Second が 31 で、両方不成立になるというのはありうる。
    再現性の低いバグっす。

    どう直したらよいかを課題にしておこう。
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79387  Re[7]: 一定時刻での割り込み
□投稿者/ ルパン -(2016/03/28(Mon) 12:46:31)
    単に30秒ごとに何かを実行するのであれば、
    Timerのインターバルを30秒にすればいいだけなのですが、
    時計の00秒を基準にする理由は何でしょうか?
    Windowsのシステム時刻と別の何かがリンクしているのでしょうか?

    また、時間に対してはどの程度の精度が必要なのでしょうか?
記事No.79372 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79388  Re[8]: 一定時刻での割り込み
□投稿者/ 超初心者 -(2016/03/28(Mon) 14:17:33)
    2016/03/29(Tue) 11:24:55 編集(投稿者)

    改めて奥の深さを感じてます。
    時計の00秒を基準にしてるのは他のPCも日本標準時を基準にしてるからです。
    精度については正確に越したことはないですが1秒くらいの誤差はあっても特に問題はありません。
    ありがとうございました。
    これで解決とさせていただきます。
記事No.79372 のレス / END /過去ログ135より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -