chosen19
asked on
Date Time Programming Question
Ok, I am writing a program in VB.NET using Visual Studio and I need to incorporate code to make the program "aware" of what day it is. For instance, I want it to act differently (as in perform different tasks) on Monday than Tuesday etc. Also, I want it to act differently at 1:00PM than 1:00AM and so on. The program is running tasks continously and I need a way to keep a monitor running so as to check the time and "know" when to switch modes (perhaps asynch?). I am awarding 500 points not for difficulty but for speed and the numerous questions asked in one. Thank you.
pseudo code
if Monday then
do mondayProtocol
check time
if time > 1700 and <1800 then
do sixOClockRoutine
if time = 0000 then
run midnightBackup
etc
pseudo code
if Monday then
do mondayProtocol
check time
if time > 1700 and <1800 then
do sixOClockRoutine
if time = 0000 then
run midnightBackup
etc
ASKER
My app is running continously and the Monday protocol would run all day Monday from 0000 until approximately 2300 when a subroutine would begin preperation for the Tuesday protocol. Also while running, the changing of the hour would change Monday subroutines.
a generic hierarchy would be
General Week Protocol (Normal Operations)
Crossover Crossover Crossover Crossover Crossover Crossover
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine
0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine
etc
with all the hourly routine (sorry I'm an mixing the terms routine and process/procedure) incrementing hourly so that theoretically each hour of each day has a seperate routine triggered - even if the routine calls for the app to do nothing.
I like the seperate thread idea, that seems to be the most logical for my situation as it would allow my crossover routine to work in the background while the other routines are running and would allow my program to continue it's foreground work. Could you elaborate with a specific code example on constructing the thread and setting it to initiate at a specific day time?
a generic hierarchy would be
General Week Protocol (Normal Operations)
Crossover Crossover Crossover Crossover Crossover Crossover
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine 0000 Routine
0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine 0100 Routine
etc
with all the hourly routine (sorry I'm an mixing the terms routine and process/procedure) incrementing hourly so that theoretically each hour of each day has a seperate routine triggered - even if the routine calls for the app to do nothing.
I like the seperate thread idea, that seems to be the most logical for my situation as it would allow my crossover routine to work in the background while the other routines are running and would allow my program to continue it's foreground work. Could you elaborate with a specific code example on constructing the thread and setting it to initiate at a specific day time?
Is this going to be a console app or a windows form? If you are using a form, drop a timer control on the form. Set its interval to 1000 milliseconds (i.e. 1 second). Make sure that it is enabled (I say that becuase I forget that step from time to time :>).
Do some additional research on threading. It is a very complicated issue (concurrency issues and the like)
The code I have provided I think will work, but I haven't done much threading.
In the Timer tick event, you can use the following code
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
dim myDate as date = now
Select Case mydate.DayOfWeek
Case DayOfWeek.Sunday
Case DayOfWeek.Monday
'monday is the subroutine to which the thread will execute
Dim myThred As New Threading.Thread(AddressOf monday)
myThred.Start()
Case DayOfWeek.Tuesday
Case DayOfWeek.Wednesday
Case DayOfWeek.Thursday
Case DayOfWeek.Friday
Case DayOfWeek.Saturday
End Select
end sub
private sub monday()
Select Case myTime
Case Is = CDate("00:00:00")
MidnightMonday
end select
end sub
Do some additional research on threading. It is a very complicated issue (concurrency issues and the like)
The code I have provided I think will work, but I haven't done much threading.
In the Timer tick event, you can use the following code
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
dim myDate as date = now
Select Case mydate.DayOfWeek
Case DayOfWeek.Sunday
Case DayOfWeek.Monday
'monday is the subroutine to which the thread will execute
Dim myThred As New Threading.Thread(AddressOf
myThred.Start()
Case DayOfWeek.Tuesday
Case DayOfWeek.Wednesday
Case DayOfWeek.Thursday
Case DayOfWeek.Friday
Case DayOfWeek.Saturday
End Select
end sub
private sub monday()
Select Case myTime
Case Is = CDate("00:00:00")
MidnightMonday
end select
end sub
The 'at' command in a command window (DOS Box) can do all the scheduling you need. Simply make a separate prog for each job and and let Windows do the scheduling.
Type
at /?
or
help at
at the command prompt if you want to learn more.
Regards, Alex
Type
at /?
or
help at
at the command prompt if you want to learn more.
Regards, Alex
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Forced accept.
Computer101
EE Admin
Computer101
EE Admin
if Monday then
do mondayProtocol
and your app is "running tasks continously"...so does that mean your app is also running continously?
It is technically Monday at midnight...so you want "mondayProtocol" to run when?
(a) At midnight on Monday
(b) Only once each Monday when the app is started
(c) Every time the app is started on Mondays
(d) Something else
What should happen if the app is not run on Monday at all?
Typically you have three choices for these types of apps:
(1) Use a Polling Timer and compare the current time against a list of events.
(2) Create a seperate thread for each event and put it to sleep until it should wake up.
(3) Use an external scheduling mechanism (such as windows scheduler) and pass an event "ID" into the app via command line arguments.