Tache

Commande de compilation

Dans le menu Project - References de Visual Basic, il faut importer les déclarations des modules Up ! Kernel et Up ! System en cochant les cases correspondantes.

Commande d'enregistrement des ActiveX

upsvtm Com=Charger

Commande d'exécution

tache.exe

Cet exemple ne fonctionne qu'à partir de la version .NET 2002 puisque cela nécessite que le noyau d'exécution de Visual Basicsupporte le multi-thread.

Fichiers sources

Source du module

Public Const SynchronisationPrivee As Integer = 1
Public Const SynchronisationProtegee As Integer = 2
Public Const SynchronisationPublique As Integer = 3
Public Const SynchronisationLecturePartagee As Integer = 1
Public Const SynchronisationLectureExclusive As Integer = 2
Public Const SynchronisationEcriturePartagee As Integer = 3
Public Const SynchronisationEcritureExclusive As Integer = 4

Public MUpsKrn As IUpsKrn
Public MUpsSys As IUpsSys
Public S As IUpsSysSynchronisation
Public T1 As IUpsSysTache
Public C As IUpsKrnCaractere

Public Sub EcrireEcran(ByVal Libelle As String)
' =============================================
Form1.Ecran.AddItem Libelle
End Sub

Public Function PrincipalT1(ByVal T As IUpsSysTache) As Long
' ==========================================================
On Error GoTo GestionErreur

EcrireEcran "Debut de la tâche " + MUpsKrn.Caractere2DComBStr(T.NomTache())

S.Prendre SynchronisationLecturePartagee
MUpsSys.Attendre 1
EcrireEcran "T1 (1) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationLecturePartagee
MUpsSys.Attendre 1
EcrireEcran "T1 (2) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationLecturePartagee
MUpsSys.Attendre 1
EcrireEcran "T1 (3) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationLectureExclusive
MUpsSys.Attendre 1
EcrireEcran "T1 (4) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationLectureExclusive
MUpsSys.Attendre 1
EcrireEcran "T1 (5) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationLectureExclusive
MUpsSys.Attendre 1
EcrireEcran "T1 (6) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

T.SuspendreTache

Do Loop
Exit Function

GestionErreur:
'=============
EcrireEcran Erreur UpsKrn-0 : L'exception suivante a été envoyée dans le source '" + Err.Source + "' :"
EcrireEcran Err.Description
End Function

Source de la fenêtre principale

Private Sub Form_Load()
' =====================
On Error GoTo GestionErreur

Set MUpsKrn = CreateObject("UpsApp.UpsKrn")
Set MUpsSys = CreateObject("UpsApp.UpsSys")

Set S = MUpsSys.Synchronisation1(MUpsKrn.DComBStr2Caractere("ExempleDeSynchronisation"), SynchronisationPrivee)
S.Prendre SynchronisationEcritureExclusive
Set T1 = MUpsSys.Tache1(MUpsKrn.DComBStr2Caractere("ExempleDeTache"), MUpsKrn.DComAppel2Appel(HRESULT PrincipalT1([in] IUpsSys::Tache *T, [out, retval] long *retval)", AddressOf PrincipalT1), False)

Set C = MUpsKrn.DComBStr2Caractere("coucou")
EcrireEcran "TP (1) : C=" + MUpsKrn.Caractere2DComBStr(C)
MUpsSys.Attendre 5
S.Lacher

S.Prendre SynchronisationEcriturePartagee
MUpsSys.Attendre 1
Set C = MUpsKrn.DComBStr2Caractere("coucou2")
EcrireEcran "TP (2) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationEcriturePartagee
MUpsSys.Attendre 1
Set C = MUpsKrn.DComBStr2Caractere("coucou3")
EcrireEcran "TP (3) : C=" + MUpsKrn.Caractere2DComBStr(C)
S.Lacher

S.Prendre SynchronisationEcriturePartagee
MUpsSys.Attendre 1
S.Lacher

MUpsSys.Attendre 5
If T1.EstSuspendue Then Else EcrireEcran "T1 n'est pas suspendue" End If T1.ReprendreTache

MUpsSys.Attendre 5
T1.ArreterTache 1
If T1.EstTerminee() Then End If EcrireEcran "Code retour de T1=" + Str$(T1.CodeRetour())
Set T1 = Nothing

Set MUpsSys = Nothing
Set MUpsKrn = Nothing
Exit Sub

GestionErreur:
'=============
EcrireEcran Erreur UpsKrn-0 : L'exception suivante a été envoyée dans le source '" + Err.Source + "' :"
EcrireEcran Err.Description
End Sub