Λοιπόν,
Πρώτα απ’ όλα να σας χαιρετίσω όλους μιας και είναι νέος στην παρέα σας.
Η εταιρία ασχολείται με ανάπτυξη εφαρμογών κινητής τηλεφωνίας (bulk SMS, premium SMS και
mobile
content) επίσης έχουμε
το Logolove.gr καθώς
και πολλά άλλα websites αντιστοίχου περιεχομένου.
Ανακάλυψα ότι υπάρχει πρόβλημα με το System.Timers.Timer το θέμα είναι ότι σε ακαθόριστους
χρόνους αυτοί οι timers σταματούν να μετρούν ειδικότερα
όταν μία εφαρμογή έχει threads. Το θέμα το έλυσα χρησιμοποιώντας
το System.Threading.Timer για όσους αντιμετωπίζουν αυτό το πρόβλημα σας παραθέτω
τον παρακάτω κώδικα.
Public Class
MyTimers
Private
myFlashOnTime As Long
Private
myFlashOffTime As Long
Private
myFlashTime As Long
Private
Flasher As System.Threading.Timer
Private
myFlashWaitTime As Long
= 0
Public
Event Elapsed(ByVal
sender As Object)
Public
Sub New()
End
Sub
Public
Sub New(ByVal Interval As Long)
Me.Interval
= Interval
End
Sub
Public
Property Interval() As
Long
Get
Return myFlashWaitTime
End
Get
Set(ByVal Value As Long)
myFlashOnTime = Value
myFlashWaitTime =
Value
myFlashOffTime = Value
End
Set
End
Property
Public
Sub Start()
Try
If myFlashOnTime = 0 Or
myFlashOffTime = 0 Then Exit Sub
myFlashTime =
myFlashOnTime
Flasher = New System.Threading.Timer(AddressOf
DoElapsed, Nothing, myFlashWaitTime,
myFlashOnTime)
Catch
ex As Exception
Throw New
Exception("Error While Trying To Start The Timer", ex)
End
Try
End
Sub
Public
Sub [Stop]()
Try
If Flasher Is Nothing Then Exit Sub
Flasher.Change(System.Threading.Timeout.Infinite,
0)
Flasher = Nothing
Catch
ex As Exception
Throw New
Exception("Error While Trying To Stop The Timer", ex)
End
Try
End
Sub
Private
Sub DoElapsed(ByVal
o As Object)
'LogWriter.AppendLog("Raising
Elapsed Event")
RaiseEvent
Elapsed(Me)
End
Sub
End Class
Το πρόβλημα μου είναι το εξής:
Έχω μία εφαρμογή (windows Service) στην οποία σηκώνω δυναμικά
threads. Κάθε thread αναλαμβάνει
να κάνει παρόμοιες εργασίες και όλα μαζί παίρνουν κάποια δεδομένα από ένα κοινό
για όλα DataTable.
Κάθε thread πρέπει να
εκτελεί μια εργασία αφού πρώτα υπολογίσει τον χρόνο που θα πρέπει να περιμένει πριν
την εκτέλεση.
Για αυτόν τον σκοπό χρησιμοποιώ μέσα στο thread το "System.Threading.Thread.Sleep" αλλά αντί να κάνει "Sleep"
μόνο το thread
κάνει "Sleep"
όλο το service..
Υπάρχει τρόπος να αποφύγω την χρίση ενός ακόμα timer?
Ευχαριστώ εκ’ των προτέρων
Γιάννης