IntegrovanΘ prost°edφ rubriky Visual Basic |
Autor: Jßn Hanßk |
||||||||
|
TΘma m∞sφce |
||||||||
Programovßnφ vφcevlßknov²ch aplikacφ |
|||||||||
╚asovß nßroΦnost (min): 65 |
ZaΦßteΦnφk |
PokroΦil² |
Profesionßl |
||||||
|
|
|
|||||||
|
Pou₧it² operaΦnφ systΘm : Hlavnφ v²vojov²
nßstroj : DalÜφ v²vojov² software : Jin² software : |
Windows 2000 SP3 Visual Basic .NET
2002 Äßdn² Äßdn² |
|||||||
|
Nep°ehlΘdn∞te exkluzivnφ
Specißl pro programßtory, kter²
pojednßvß o jazykovΘ interoperabilit∞ mezi jazyky Managed Extensions for C++
a Visual Basic .NET. |
||||||||
|
Milφ Φtenß°i,
32bitovΘ prost°edφ operaΦnφho systΘmu Windows s sebou p°ineslo n∞kolik podstatn²ch a zßsadnφch zm∞n, a to nejen z u₧ivatelskΘho, n²br₧ i z programovacφho pohledu. Na p°ednφ p°φΦku v °eb°φΦku ätopô zm∞n se °adφ takΘ plnß podpora multitaskingu (paralelnφho zpracovßnφ v∞tÜφho mno₧stvφ ·loh) a multithreadingu (podpora exekuce vφcevlßknov²ch aplikacφ). Jak naprogramovat vφcevlßknovou aplikaci se dozvφte prßv∞ v tomto vydßnφ sekce TΘma m∞sφce.
Obsah |
Teoretick² ·vod do problematiky proces∙ a vlßken
Abychom mohli mluvit o programovßnφ vφcevlßknov²ch aplikacφ na pat°iΦnΘ ·rovni, musφme si nejprve pov∞d∞t pßr slov k ävφcevlßknovΘô terminologii. ZaΦneme od definice pojmu aplikace, kter² je vßm pravd∞podobn∞ nejbli₧Üφ. Aplikace je definovßna jako soubor programovΘho k≤du, dat a dalÜφch internφch nebo externφch zdroj∙, kterΘ spoleΦn∞ vytvß°ejφ jeden celek, jen₧ °eÜφ jistou smysluplnou ·lohu. Pojem aplikace se n∞kdy voln∞ zam∞≥uje s termφnem poΦφtaΦov² program.
|
I kdy₧ je ve v∞tÜin∞ p°φpad∙ tato substituce mo₧nß, nenφ zcela p°esnß.
A to z toho d∙vodu, ₧e programem m∙₧e b²t takΘ jenom n∞kolik °ßdk∙
programovΘho k≤du, kterΘ aΦ °eÜφ jist² ·kol, nemusφ b²t nutn∞ samostatn²m
celkem, jen₧ je p°edlo₧en p°ed u₧ivatele. M∙₧eme vÜak °φct, ₧e aplikace je
ji₧ hotov², odlad∞nφ poΦφtaΦov² program, jen₧ se stßvß p°edm∞tem prodeje na
softwarovΘm trhu. |
V .NET prost°edφ je k≤d aplikace ulo₧en v jednΘ, nebo i n∞kolika assembly. Assembly je pak ulo₧ena v p°enositelnΘm spustitelnΘm souboru PE (Portable Executable). Jestli₧e je soubor aktivovßn (poklepßnφm na jeho ikonu), pot°ebn² programov² k≤d v podob∞ jazyka MSIL bude p°elo₧en JIT kompilßtorem, umφst∞n do pam∞ti poΦφtaΦe a podroben p°φmΘ exekuci. V tomto okam₧iku °φkßme, ₧e aplikace b∞₧φ. V programovßnφ se b∞₧φcφ aplikace oznaΦuje jako proces. Pro pot°eby procesu je alokovßn jist² pam∞¥ov² prostor, ve kterΘm se dan² proces nachßzφ. 32bitov² operaΦnφ systΘm Windows je, jak ji₧ bylo °eΦeno, pln∞ vybaven pro sprßvu vφce proces∙, resp. ·kol∙. Jak je to mo₧nΘ? Velmi zjednoduÜen∞ m∙₧eme prohlßsit, ₧e ka₧dΘmu procesu operaΦnφ systΘm p°iΦlenφ stanoven² Φasov² interval, v rßmci kterΘho je procesor (CPU) poΦφtaΦe pln∞ zam∞stnßn provßd∞nφm k≤du danΘho procesu. Po uplynutφ vymezenΘho intervalu se operaΦnφ systΘm äp°epneô do jinΘho procesu a jistou dobu vykonßvß k≤d tohoto procesu. Tφmto zp∙sobem operaΦnφ systΘm spravuje vÜechny procesy, neboli spuÜt∞nΘ aplikace. Je d∙le₧itΘ si uv∞domit, ₧e prßce s procesy je kompletn∞ v rukou operaΦnφho systΘmu, nikoliv jin²ch proces∙.
Ka₧d² proces je tvo°en p°inejmenÜφm jednφm vlßknem (thread). Vlßkno lze definovat jako samostatnou jednotku exekuce programovΘho k≤du procesu. Ka₧dΘ vlßkno mß svΘ identifikaΦnφ Φφslo (ID), jmΘno a prioritu. Zatφmco jmΘno vlßkna tvo°φ textov² °et∞zec, jen₧ slou₧φ na u₧ivatelskou identifikaci vlßkna, identifikaΦnφ Φφslo vlßkno p°esn∞ charakterizuje z pohledu operaΦnφho systΘmu. Priorita vlßkna urΦuje, jak intenzivn∞ je zapot°ebφ programov² k≤d danΘho vlßkna provßd∞t. ZvyΦejn∞ majφ vlßkna normßlnφ prioritu, avÜak v p°φpad∞ pot°eby je mo₧nΘ zv²Üit, nebo naopak snφ₧it prioritu vlßkna na p°φsluÜnou ·rove≥. Jestli₧e proces obsahuje jenom jedno vlßkno, mluvφme o jednovlßknovΘ aplikaci (single threaded application). Pokud jste vyvφjeli aplikace v p°edchozφ verzi Visual Basicu, nejspφÜ jste pracovali pouze s jednovlßknov²mi aplikacemi. Visual Basic .NET ovÜem nabφzφ programovßnφ takΘ vφcevlßknov²ch aplikacφ (multithreaded applications). Vφcevlßknovß aplikace je aplikace, kterß pou₧φvß dv∞ a vφce vlßken. Komparaci jedno a vφcevlßknovΘ aplikace m∙₧ete vid∞t na obr. 1.
Obr. 1 û Jedno a vφcevlßknovß aplikace
Vlßkno, kterΘ je na obrßzku pojmenovßno jako äVlßkno 1ô je zßkladnφm vlßknem procesu, co₧ znamenß, ₧e toto vlßkno je vytvo°eno implicitn∞ b∞hov²m prost°edφm aplikace. Naproti tomu vlßkno s nßzvem äVlßkno 2ô je pracovnφm vlßknem, kterΘ vytvo°il programßtor pro svΘ pot°eby. AΦkoliv obrßzek p°edstavuje jenom dvouvlßknovou aplikaci, proces m∙₧e obsahovat i v∞tÜφ mno₧stvφ vlßken. P°φliÜ mnoho vlßken ovÜem nenφ ₧ßdoucφ, proto₧e by snadno mohly nastat potφ₧e se synchronizacφ jednotliv²ch vlßken (pomineme-li pon∞kud v∞tÜφ pam∞¥ovou nßroΦnost aplikace). á
|
Ka₧dΘmu vlßknu v procesu je p°i°azen jist² Φasov² interval, b∞hem
kterΘho CPU poΦφtaΦe realizuje programovΘ instrukce danΘho vlßkna. Jakmile tento
interval uplyne, CPU okam₧it∞ zaΦne zpracovßvat k≤d dalÜφho vlßkna. Jeliko₧
je Φasov² interval realizace k≤du vlßkna velmi mal², vizußln∞ to vypadß,
jakoby ob∞ vlßkna pracovala souΦasn∞.á |
Vytvß°φme prvnφ vφcevlßknovou aplikaci
V nßsledujφcφ programovΘ ukßzce si p°edvedeme, jak sestrojit jednoduchou dvouvlßknovou aplikaci. Postupujte podle nφ₧e uveden²ch instrukcφ:
ááááááá Dim
NovΘVlßkno As New
Threading.Thread(AddressOf Metoda)
ááááááá NovΘVlßkno.Name =
"MojeVlßkno"
ááááááá NovΘVlßkno.Start()
Poka₧dΘ, kdy₧ budeme chtφt vytvo°it novΘ vlßkno, pou₧ijeme t°φdu Thread z jmennΘho prostoru System.Threading. Z tohoto pohledu je tedy z°ejmΘ, ₧e k vytvo°enΘmu vlßknu budeme ve skuteΦnosti p°istupovat prost°ednictvφm instance t°φdy Thread. Instance tΘto t°φdy se ovÜem rodφ pon∞kud zvlßÜtnφm zp∙sobem. Podφvejme se na n∞j blφ₧e. P°edevÜφm je zapot°ebφ obslou₧it parametrick² konstruktor t°φdy Thread, kterΘmu je nutno p°edat (pomocφ operßtoru AddressOf) runtime adresu procedury, kterß bude provßd∞na na nov∞ vytvo°enΘm vlßkn∞. Ve skuteΦnosti je vÜak cel² proces pon∞kud komplikovan∞jÜφ: AΦkoliv je tato skuteΦnost zastφn∞na, je vytvo°en delegßt ThreadStart, jemu₧ je sv∞°ena runtime adresa spouÜt∞cφ procedury. I kdy₧ vytvo°φme novΘ vlßkno (resp. instanci t°φdy Thread), neznamenß to jeÜt∞, ₧e jsme takΘ toto vlßkno spustili.
|
V tΘto souvislosti je nutno podotknout, ₧e p°i prßci s vlßkny je
zapot°ebφ d∙sledn∞ rozliÜovat dva pojmy, a sice vytvo°enφ vlßkna a jeho
spuÜt∞nφ. Vlßkno je vytvo°eno jakmile je zrozena instance t°φdy Thread.
Takto vytvo°enΘ vlßkno mß p°φznak Unstarted, co₧ znamenß, ₧e jeÜt∞
nebylo spuÜt∞no. Aby mohlo b²t vlßkno spuÜt∞no, musφ b²t zavolßna metoda Start
instance t°φdy Thread. áá |
SpuÜt∞nφ novΘho vlßkna zabezpeΦφme zavolßnφm metody Start instance t°φdy Thread. Jakmile je aktivovßna metoda Start, je zavolßna spouÜt∞cφ procedura, kterß bude provßd∞na na novΘm vlßkn∞. Proces tvorby a spuÜt∞nφ novΘho vlßkna je znßzorn∞n na obr. 2.
Obr. 2 û Proces vytvo°enφ a spuÜt∞nφ vlßkna
|
Pro zvφdavΘ programßtory: Vytvo°enφ
instance t°φdy Thread pod drobnohledem |
JeÜt∞ jednou se podφvejme na v²Üe uveden² zdrojov² k≤d pro vytvo°enφ
instance t°φdy Thread: ááááááá Dim NovΘVlßkno As New Threading.Thread(AddressOf
Metoda) ááááááá
NovΘVlßkno.Name = "MojeVlßkno" ááááááá
NovΘVlßkno.Start() I kdy₧ je tento k≤d zcela sprßvn², nenφ v n∞m vid∞t role delegßta
ThreadStart. Obm∞nφme-li k≤d nßsledovn∞, vyjdou skrytΘ skuteΦnosti na
povrch: ááááááá Dim NovΘVlßkno As New Threading.Thread _ ááááááá (New Threading.ThreadStart(AddressOf
Metoda)) ááááááá
NovΘVlßkno.Name = "MojeVlßkno" áááááá áNovΘVlßkno.Start() Tento k≤d jasn∞ demonstruje zp∙sob, pomocφ n∞ho₧ je instanci t°φdy Thread
p°edßn delegßt ThreadState, kterΘmu je prost°ednictvφm operßtoru AddressOf
poskytnuta runtime adresa spouÜt∞cφ procedury (s nßzvem Metoda), kterß
bude realizovßna na nov∞ vytvo°enΘm vlßkn∞. AΦkoliv je tento zßpis k≤du pro
vytvo°enφ vlßkna znateln∞ delÜφ, umo₧≥uje nßm pohled do zßkulisφ procesu
vytvß°enφ vlßkna. V mnoha programech jej vÜak zcela jist∞ neuvidφte,
proto₧e Visual Basic p°idßvß uvedenΘ rozÜφ°enφ k≤du implicitn∞, a tedy nenφ
nutnΘ, abyste tuto äprodlou₧enouô verzi k≤du pou₧φvali ve sv²ch aplikacφch. |
V naÜem p°φpad∞ je vytvo°ena instance t°φdy Thread s nßzvem NovΘVlßkno. Konstruktoru t°φdy je p°edßna adresa procedury Metoda, tato procedura se tedy bude provßd∞t na druhΘm (vytvo°enΘm) vlßkn∞. JeÜt∞ p°edtφm, ne₧ je vlßkno spuÜt∞no, je upravena vlastnost Name instance MojeVlßkno û novΘ vlßkno tak bude disponovat u₧ivatelsky p°φv∞tiv²m jmΘnem.
Option Strict On
Public Class Form1
ááá Inherits
System.Windows.Forms.Form
á ááDim frm As Form
ááá Dim
lblText1 As Label
ááá Dim
lbltext2 As Label
ááá Dim
Progres As ProgressBar
ááá Const
PROGRES_MIN As Integer
= 1
ááá Const
PROGRES_MAX As Integer
= 1000
ááá Private
Sub Button1_Click(ByVal
sender As System.Object, _
ááá ByVal
e As System.EventArgs) Handles
Button1.Click
ááááááá Dim
NovΘVlßkno As New
Threading.Thread(AddressOf Metoda)
ááááááá NovΘVlßkno.Name =
"MojeVlßkno"
ááááááá NovΘVlßkno.Start()
ááá End
Sub
ááá Private
Sub Metoda()
ááááááá frm = New Form()
ááááááá lblText1 = New Label()
ááááááá lbltext2 = New Label()
ááááááá Progres = New ProgressBar()
ááááááá With
frm
ááááááááááá .ControlBox = False
ááááááááááá .FormBorderStyle =
FormBorderStyle.FixedDialog
ááááááááááá .Text = "Probφhß
v²poΦet nßhodn²ch Φφsel..."
ááááááá End
With
ááááááá With
lblText1
ááááááááááá .Location = New Point(0, 0)
ááááááááááá .Size = New Size(frm.Width, frm.Height \ 4)
ááááááááááá .Text = "Prßv∞
probφhß generovßnφ nßhodn²ch Φφsel"
ááááááááááá .Font = New Font("Verdana", 18, FontStyle.Bold, _
ááááááá ááááGraphicsUnit.Pixel)
ááááááááááá .TextAlign =
ContentAlignment.MiddleCenter
ááááááá End
With
ááááááá With
lbltext2
ááááááááááá .Location = New Point(0, 75)
ááááááááááá .Size = New Size(frm.Width, frm.Height \ 6)
ááááááááááá lbltext2.Text =
"╚φseln² pr∙beh generovßnφ Φφsel:"
ááááááááááá .Font = New Font("Verdana", 11, FontStyle.Bold, _
ááááááááááá GraphicsUnit.Pixel)
ááááááááááá .TextAlign =
ContentAlignment.MiddleCenter
ááááááá End
With
ááááááá With
Progres
ááááááááááá .Dock = DockStyle.Bottom
ááááááá áááá.Height = frm.Height \ 6
ááááááááááá .Minimum = PROGRES_MIN
ááááááááááá .Maximum = PROGRES_MAX
ááááááá End
With
ááááááá With
frm.Controls
ááááááááááá .Add(Progres)
ááááááááááá .Add(lblText1)
ááááááááááá .Add(lbltext2)
ááááááá End
With
ááááááá AddHandler
frm.Load, AddressOf frm_Load
ááááááá frm.Show()
ááááááá Dim
f As Integer =
FreeFile()
ááááááá Randomize()
ááááááá Dim
a, x As Integer
ááááááá FileOpen(f,
"d:\data.txt", OpenMode.Output)
ááááááá For
a = PROGRES_MIN To PROGRES_MAX
ááááááááááá x = CInt(Int(1000 * Rnd()) + 1))
ááááááááááá Progres.Value = a
ááááááááááá lbltext2.Text = a &
" / " & PROGRES_MAX
ááááááááááá If
a < PROGRES_MAX Then
ááááááááááááááá Print(f, x &
", ")
ááááááááááá Else
ááááááááááááááá Print(f, x &
".")
ááááááááááá End
If
áááááááá áááApplication.DoEvents()
ááááááá Next
a
ááááááá FileClose(f)
ááááááá frm.Close()
ááá End
Sub
ááá Private
Sub frm_Load(ByVal
sender As Object,
ByVal e As
EventArgs)
ááááááá frm.Top =
(Screen.PrimaryScreen.Bounds.Height - frm.Height) \ 2
ááááááá frm.Left =
(Screen.PrimaryScreen.Bounds.Width - frm.Width) \ 2
ááá End
Sub
End Class
Na vytvo°enΘm vlßkn∞ bude provßd∞n k≤d procedury Metoda, kter² realizuje nßsledujφcφ Φinnosti:
Testujeme prvnφ vφcevlßknovou
aplikaci
Jste-li s programovßnφm hotovi, m∙₧ete aplikaci sestavit (Build è Build Solution). Jestli₧e aplikaci spustφte, uvidφte, ₧e svoji prßce odvßdφ skv∞le (obr. 2).
Obr. 2 û Vφcevlßknovß
aplikace v akci
Jak se ovÜem dovφme, ₧e generovßnφ nßhodn²ch Φφsel, jako i dalÜφ k≤d, jen₧ je ulo₧en v procedu°e Metoda skuteΦn∞ b∞₧φ na nov∞ vytvo°enΘm vlßkn∞? Inu, asi takto:
Obr. 3 û Vlo₧enφ zarß₧ky do programovΘho k≤du
|
O sprßvnosti umφst∞nφ zarß₧ky vßs ujistφ Φerven² puntφk, jen₧ se
objevφ v levΘm panelu. Krom∞ ΦervenΘho puntφku si m∙₧ete takΘ vÜimnout
Φerven² pruh, kter²m je zv²razn∞n °ßdek programovΘho k≤du, na n∞m₧ je zarß₧ka
umφst∞nß. |
|
Jestli₧e na n∞jak² °ßdek programovΘho k≤du umφstφme zarß₧ku, dßme tφm
debuggeru Visual Basicu p°φkaz, aby p°i p°echodu na °ßdek se zarß₧kou
zastavil b∞h aplikace a zp°φstupnil dodateΦnΘ mo₧nosti pro odla∩ovßnφ k≤du
aplikace.á |
Za°azenφ programovΘ zarß₧ky je v²hodnΘ p°edevÜφm proto, ₧e jakmile debugger Visual Basicu äskoΦφô na °ßdek se zarß₧kou, bude b∞h aplikace pozastaven a my budeme moci prozkoumat vnit°nφ programovΘ jßdro aplikace. Pozastavenou aplikaci lze samoz°ejm∞ dßle rozb∞hnout, nebo ji m∙₧ete ukonΦit.
|
DialogovΘ okno Threads m∙₧ete zobrazit takΘ pomocφ klßvesovΘ
zkratky CTRL+ALT+H. |
Obr. 4 û DialogovΘ okno Threads
Operace s vlßkny
Jakmile je vlßkno vytvo°eno, m∙₧ete s nφm provßd∞t n∞kolik operacφ. Rßmec potencißlnφch akcφ pro prßci s vlßkny zast°eÜuje t°φda Thread se sv²mi Φlensk²mi metodami a vlastnostmi. V nßsledujφcφ tabulce se nachßzφ p°ehled n∞kter²ch klφΦov²ch metod a vlastnostφ pro prßci s vlßkny, o nich₧ si myslφm, ₧e by mohly b²t pro vßs u₧iteΦnΘ.
Nßzev |
Typ
Φlenu |
Charakteristika |
|
Abort |
|
Metoda |
Metoda se pou₧φvß pro
zruÜenφ vlßkna. Po zavolßnφ metody je ve vybranΘm vlßknu generovßna v²jimka ThreadAbortException,
naco₧ je spuÜt∞n proces ruÜenφ vlßkna. |
CurrentThread |
|
Vlastnost |
Jde o sdφlenou
(shared) vlastnost, co₧ znamenß, ₧e jde o vlastnost samotnΘ t°φdy Thread
a nikoliv instance tΘto t°φdy. Pou₧ijete-li tuto vlastnost, zφskßte p°φstup
k vlßknu, jeho₧ programov² k≤d je prßv∞ provßd∞n.á |
Name |
|
Vlastnost |
Pokud chcete vlßkno
pojmenovat, p°φpadn∞ chcete-li jmΘno vlßkna zφskat, m∙₧ete pou₧φt tuto
vlastnost. Hodnotou vlastnosti je textov² °et∞zec, jen₧ p°edstavuje
u₧ivatelskΘ jmΘno pro po₧adovanΘ vlßkno. |
Priority |
|
Vlastnost |
Vlastnost urΦuje
prioritu vlßkna. Ka₧dΘ vlßkno se m∙₧e nachßzet v n∞kolika prioritnφch
stavech: ╖
Highest (NejvyÜÜφ priorita) ╖
AboveNormal (VyÜÜφ ne₧li normßlnφ priorita) ╖
Normal (Standardnφ priorita) ╖
BelowNormal (Ni₧Üφ ne₧li normßlnφ priorita) ╖
Lowest (Nejni₧Üφ priorita) Hodnotou vlastnosti
je jeden z Φlen∙ enumerace ThreadPriority (AboveNormal, BelowNormal,
Highest, Lowest, Normal). |
ResetAbort |
|
Metoda |
Jde o sdφlenou
(shared) metodu, kterß likviduje po₧adavek na zruÜenφ (Abort) vlßkna. |
Resume |
|
Metoda |
Metodu lze aplikovat
na vlßkno, kterΘ bylo uvedeno do stavu neΦinnosti pou₧itφm metody Suspend.
Metoda zabezpeΦφ probuzenφ vlßkna a exekuci jeho programovΘho k≤du.á |
Sleep |
|
Metoda |
Jde o sdφlenou
(shared) a takΘ p°etφ₧enou metodu, kterß se vyskytuje ve dvou exemplß°φch. Ob∞
p°etφ₧enΘ varianty metody zamezφ provßd∞nφ programovΘho k≤du aktivnφho vlßkna
na urΦit² Φasov² interval (tento je zvyΦejn∞ m∞°en
v milisekundßch).áááá |
Start |
|
Metoda |
Zavolßnφ metody
zp∙sobφ rozb∞hnutφ programovΘho k≤du na danΘm vlßkn∞. Vlßknu, resp. instanci
t°φdy Thread, je po aktivaci metody Start p°i°azen stav ThreadState.Running,
co₧ znamenß, ₧e vlßkno je aktivnφ (je realizovßn k≤d vlßkna). Jestli₧e bylo
vlßkno jednou ukonΦeno, nelze jej op∞t aktivovat prost°ednictvφm op∞tovnΘho
volßnφ metody Start.áá |
Suspend |
|
Metoda |
Metoda Suspend
je podobn∞ jako metoda Sleep pou₧φvanß na äuvedenφ vlßkna do stavu
spßnkuô. Mezi t∞mito dv∞ma metodami ovÜem existuje n∞kolik podstatn²ch
rozdφl∙. P°edevÜφm, metoda Sleep je sdφlenß (shared), co₧ znamenß, ₧e
ji mo₧no aplikovat jenom na vlßkno, jeho₧ programov² k≤d se prßv∞
uskuteΦ≥uje. Metoda Suspend je naproti tomu metodou instance a nikoliv
t°φdy, z Φeho₧ vypl²vß, ₧e tuto metodu m∙₧ete pou₧φt na jakoukoliv
instanci t°φdy Thread. Druh²m odliÜn²m znakem je skuteΦnost, ₧e
jestli₧e je pou₧ita metoda Sleep, je p°edem definovan² Φasov² interval
(v milisekundßch), v rßmci n∞ho₧ bude vlßkno spßt. Na druhΘ stran∞,
bude-li zavolßna metoda Suspend, nelze p°edem urΦit, kdy mß dojφt k
uspßnφ vlßkna. Ve skuteΦnosti dochßzφ k uspßnφ vlßkna v okam₧iku, kdy je
dosa₧en tzv. bezpeΦn² bod. UrΦenφ existence bezpeΦnΘho bodu mß na starosti
Common Language Runtime (CLR) pomocφ slu₧by Garbage Collection. A koneΦn∞,
poslednφ odliÜnost spoΦφvß v op∞tovnΘ aktivaci deaktivovanΘho vlßkna.
Bude-li vlßkno uspßno pomocφ metody Suspend, lze jej ihned probudit
zavolßnφm metody Resume. Uspφte-li vÜak vlßkno metodou Sleep,
neexistuje ₧ßdn² zp∙sob, jak jej probudit p°edtφm, ne₧li vyprÜφ stanovenß
doba vlßkna pro neΦinnost. |
ThreadState |
|
Vlastnost |
Ka₧dΘ vlßkno se m∙₧e
nachßzet v urΦitΘm poΦtu stav∙. SkuteΦnosti o stavu vlßkna
zprost°edkovßvß prßv∞ vlastnost ThreadState. Jde o vlastnost pouze pro
Φtenφ, co₧ znamenß, ₧e hodnotu vlastnosti lze p°eΦφst, ovÜem nenφ mo₧nΘ ji
jakkoliv modifikovat (toto chovßnφ je vzhledem k charakteru vlßken
snadno pochopitelnΘ). Hodnotou vlastnosti je jeden z Φlen∙ enumerace ThreadState.ááá |
á
Tab. 1 û Charakteristika u₧iteΦn²ch vlastnostφ a metod
t°φdy Thread
|
Prßv∞ jste doΦetli TΘma m∞sφce.á
Jestli₧e se chcete dozv∞d∞t vφce informacφ o programovßnφ ve Visual
Basicu .NET, nevßhejte a navÜtivte takΘ dalÜφ sekce rubriky Visual Basic. A
jakß₧e je dneÜnφ nabφdka? |
|
Klasifikace operßtor∙, aritmetickΘ a porovnßvacφ operßtory. |
||
Nep°ehlΘdn∞te exkluzivnφ
Specißl pro programßtory, kter² pojednßvß o jazykovΘ interoperabilit∞ mezi
jazyky Managed Extensions for C++ a Visual Basic .NET. |