Professional Documents
Culture Documents
http://forum.simple.vn/threads/8636-c-MULTITHREADING-C
Log in
Help
Register
What's New?
Articles
Forum
Forum Actions Quick Links Advanced Search
Forum
Like 84
Lp trnh phn mm
.NET
[c#] MULTITHREADING C#
Results 1 to 1 of 1
22-05-2012, 01:56 PM
#1
kiemkhachgiangho
Junior Member
[c#] MULTITHREADING C#
1. S qua v lung (Thread)
Bi vit ny mnh s hng dn cho cc bn mi tm hiu v a lung v ng dng ca n v c m t trn ngn ng C# cho d hiu. Trc tm hiu n cng vt v v n kh hiu gi mun gip cht xu g cho cc bn (Bn s cm thy v cng n gin nu lm vic nhiu vi n, ch l do k nng ca mnh yu ln cm thy phc tp) Mt lung l mt chui lin tip nhng s thc thi (m lnh hay cu lnh) trong chng trnh (ng dng). Trong mt chng trnh C#, d thy vic thc thi c bt u bng phng thc main() v tip tc cho n khi kt thc hm main(). Cu trc ny rt hay cho nhng chng trnh c mt chui xc nh nhng nhim v lin tip, nhng thng th trong mt chng trnh ng c nhiu hn mt cng vic vo cng mt lc. Mt v d rt hay v kh thc t m mnh thy trn din n tin hc ca "can_qua", cc bn cng tham kho Vn quan trng l bn phi tm ra mt cch no chia mt cng vic ln thnh nhng cng vic nh m Tng hp T ng Chnh t B du kiu mi [ Bt/Tt (F9) n/Hin (F8) ]
Mudim v0.8
Tt
VNI
Telex
Viqr
1 of 5
4/16/2013 1:03 PM
[c#] MULTITHREADING C#
http://forum.simple.vn/threads/8636-c-MULTITHREADING-C
thi. V d, m giao vic cho con l "lm vic xong mi c i coi xi-n". "Cng vic ln" ny c th gm 3 vic nh "qut nh", "ra chn", v i coi "xi-n". Trong ch c "coi xi-n" sau khi lm xong hai vic kia. R rng l bn mun lm xong vic nh cng sm cng tt vi vt, nn bn ku thng em bn qut nh, bn th ra chn, c hai ngi cng lm ng thi. Ra chn xong trc, bn phi i thng em bn thng bo l qut nh cng xong th bn mi v i coi xi-n c. Nh vy multithread cho "ra chn" v "qut nh" lm tng hiu sut thc hin cng vic ca bn (so vi vic bn lm tun t ra chn, qut nh, coi xi-n). V d nh v a lung V d ny mnh s m t 2 lung (cho n gin) c thc thi cng mt lc. y th bn c tng tng ra rng c hai thng tn l A v B thi m t 0 cho n 100, thng no m xong trc th bo co v c v ch. Tng ng mnh s to ra 2 phng thc A() v B() (mi lung s x l mt thng). PHP Code:
void A() { for(int i=0; i<=100; i++) { Console.WriteLine(i.ToString ()); "); } Console.WriteLine("A c xong // Bo co c xong } void B() { for(int i=0; i<=100; i++) { Console.WriteLine(i.ToString ()); "); } Console.WriteLine("B c xong // Bo co c xong
By gi thy gio (hoc l bn) bng cao hng gi 2 thng ln thi c --> 2 thng A v B cng c n y trong phng thc hm main() ca chng trnh bn s phi gi 2 thng ny PHP Code:
static void main() { ThreadStart ts1 = new ThreadStart(A); // C h nh thng A ln c ThreadStart ts2 = new ThreadStart(B); // C h nh thng B ln c // Sn sng cho cuc u (thi m nhanh :D ) Thread tA = new Thread(ts1); Thread tB = new Thread(ts2); // Bt u bm gi tA.Start(); tB.Start(); tA.Join(); Tng hp T ng Chnh t
Mudim v0.8
Tt
VNI
Telex
Viqr
(F8) ]
2 of 5
4/16/2013 1:03 PM
[c#] MULTITHREADING C#
http://forum.simple.vn/threads/8636-c-MULTITHREADING-C
// Hai thng tranh nhau m Console.WriteLine("Cuc thi kt thc"); // Ch n khi 2 thng c xong, khng bit th ng no s thng :D Console.ReadLine();
Truyn tham s cho Thread C nhiu cch truyn tham s, tu theo nhu cu m dng sao cho ph hp Thng qua phng thc Start(object) th bn c th truyn tham s theo cch ny. V d: PHP Code:
using System; using System.Threading; class ThreadSample { public static void Main() { Thread newThread = new Thread(ThreadSamp le.DoWork); newThread.Start(100); // D liu truyn vo l mt s nguyn // Start lung s dng phng thc th hin (instance method) // th trc tin ta cn khi to n tr c khi gi ThreadSample worker = new ThreadSample() ; newThread = new Thread(worker.DoMoreWork ); newThread.Start("Truyn i tng cho th read thc thi"); // Nu bit trc c i tng truyn vo th ta cn ghp kiu cho n // vic s dng c hiu qu hn } public static void DoWork(object data) { Console.WriteLine("y l lung tnh."); Console.WriteLine("D liu truyn vo: D
i khi ta cng s dng ThreadPool cho vic khi chy mt lung mi vi tham s l _Param PHP Code:
ThreadPool.QueueUserWorkItem(new WaitCallback (_ThreadProc), _Param);
Bn hy tham kho v n ti y: http://dotnetperls.com /threadpool Ch i mt lung khc Bng vic s dng phng thc Join(); ta c th cho php ch i mt lung khc thc hin xong ( thu thp d liu chng hn - do chia nh cng vic m), th lung gi n mi tip tc c cng vic ca n PHP Code:
static void Main(string[] args) { Console.WriteLine("Main thread: G i lung th 2 ThreadProc()..."); Tng hp T ng Chnh t B du kiu mi [ Bt/Tt (F9) n/Hin
Mudim v0.8
Tt
VNI
Telex
Viqr
(F8) ]
3 of 5
4/16/2013 1:03 PM
[c#] MULTITHREADING C#
http://forum.simple.vn/threads/8636-c-MULTITHREADING-C
Thread t = new Thread(new ThreadS tart(ThreadProc)); t.Start(); for (int i = 0; i < 50; i++) { Console.WriteLine("Main threa d: Do Some Work."); Thread.Sleep(0); } Console.WriteLine("Main thread fi nished: And call t.Join()"); Console.WriteLine("Main thread t m thi ang c dng li"); t.Join(); // Dng ti y // Sau khi ThreadProc hon tt Ma in thread tip tc cng vic ca n // Tip tc thc thi 3 dng lnh tip theo Console.WriteLine("Thread.Join() has returned."); Console.WriteLine("Main lm xo ng vic"); Console.ReadLine();
i s cho Join() c th l int hoc TimeSpan, khong thi gian gii hn m Main thread c th ch c, v d PHP Code:
t.Join(10000);
ngha l, sau 10s m ThreadProc cha lm xong vic ca n th Main thread khng ch na, tip tc cng vic khc
Reply With Quote
Quick Navigation
.NET
Top
All times are GMT +8. The time now is 01:45 PM.
Mudim v0.8
Tt
VNI
Telex
Viqr
(F8) ]
4 of 5
4/16/2013 1:03 PM
[c#] MULTITHREADING C#
http://forum.simple.vn/threads/8636-c-MULTITHREADING-C
Mudim v0.8
Tt
VNI
Telex
Viqr
Tng hp
T ng (F8) ]
5 of 5
4/16/2013 1:03 PM