எல்லா நிரல்களும் ஒரு main thread ஐ கொண்டிருக்கின்றன.இவை
நிரல் தொடங்கும் போது தானாகவே இயங்க தொடங்குகின்றன.
C# மற்றும்
.Net
framework ஆனது
process
based மற்றும்
thread
based என இரண்டு
வகையான multitasking
களை ஆதரிக்கின்றன.
System.Threading என்ற நேம்பேஸில் multi threading க்கிற்கான class கள்
உள்ளன. எனவே இந்த நேம்பேஸானது ப்ரொக்ராமில் இம்போர்ட் செய்யப்பட வேண்டும்.
using System.Threading;
திரட்
கிளாஸ்:
Thread கிளாஸ் ஒரு sealed class ஆகும்.
எனவே இதை inherit செய்ய இயலாது. Thread classல் சில
ப்ராப்பர்டிகளும் மற்றும் மெத்தட்களும் வரையறுக்கப்பட்டுள்ளன. இவை thread ஐ manage செய்வதற்கு
பயன்படுகின்றது.
ஒரு
த்ரெட் அனது உருவாக்குவதற்கு Thread class க்கு object create செய்யப்பட
வேண்டும். Thread class ன் constructor பின் வருமாரு இருக்கும்.
public Thread(ThreadStart start)
இங்கு
start ஆனது த்ரட் எந்த மெத்தட்டை இயக்க வேண்டும் என்பதை
குறிகின்றது.
ThreadStart ஆனது ஒரு delegate ஆகும். இது frameworkல்
பின் வருமாறு define செய்யப்பட்டுள்ளது.
public delegate void ThreadStart( )
எனவே
த்ரட் மெத்தட் ஆனது void இருக்க வேண்டும். மற்றும் எந்த argument ம்
ஏறக கூடாது.
த்ரட்
ஆனது Thread class ன் start method அழைக்கப்படும் வரை
இயக்கப்படாது.
using System;
using System.Threading;
class MyThread {
public int Count;
string thrdName;
public MyThread(string name) {
Count = 0;
thrdName = name;
}
// Entry point of thread.
public void Run() {
Console.WriteLine(thrdName + "
starting.");
do {
Thread.Sleep(500);
Console.WriteLine("In " +
thrdName +
", Count is " + Count);
Count++;
} while(Count < 10);
Console.WriteLine(thrdName + "
terminating.");
}
}
class MultiThread {
static void Main ()
{
Console.WriteLine("Main thread
starting.");
// First, construct a MyThread object.
MyThread mt = new MyThread("Child
#1");
// Next, construct a thread from that
object.
Thread newThrd = new Thread(mt.Run);
// Finally, start execution of the thread.
newThrd.Start();
do {
Console.Write(".");
Thread.Sleep(100);
} while (mt.Count != 10);
Console.WriteLine("Main thread
ending.");
}
}
இங்கு MyThread class ஆனது Run என்கின்ற
மெத்தடை கொண்டுள்ளது. இது count என்கின்ற வேரியபிளை 0 to 9 increment செய்கின்றது.
Sleep எங்கின்ற மெத்தட் அழைக்கப்ப்டுவதை
கவனிக்கவும். இது Thread classல் டிஃபைன் செய்ய்ப்பட்டுள்ள ஒரு static method ஆகும்.
Sleep method ஆனது த்ரட்டை
குறிப்பிட்ட மில்லி செகண்டுகளுக்கு suspend செய்கின்றது.
Main methodக்கு உள்ளே த்ரட் ஆனது பின் வரும் வரிகளால் உருவாக்கப்பட்டு
அழைக்கப்படுகிறது.
MyThread mt = new MyThread("Child #1");
MyThread mt = new MyThread("Child #1");
// Next, construct a thread from that
object.
Thread newThrd = new Thread(mt.Run);
// Finally, start execution of the thread.
newThrd.Start();
start method ஆனது run method அழைக்கின்றது. Run method suspend செய்யப்படும் போது main method க்கு திரும்பி அதன் do loopகுள்
என்டெர் ஆகின்றது. இரண்டு த்ரடடுகளும் இயங்குகின்றன.
Output:
Main thread starting.
Child #1 starting.
.....In Child #1, Count is 0
.....In Child #1, Count is 1
.....In Child #1, Count is 2
.....In Child #1, Count is 3
.....In Child #1, Count is 4
.....In Child #1, Count is 5
.....In Child #1, Count is 6
.....In Child #1, Count is 7
.....In Child #1, Count is 8
.....In Child #1, Count is 9
Child #1 terminating.
Main thread ending.
பதிவெழுதுவதை விட்டுவிட்டீர்களோ என அச்சம் கொண்டேன். புத்துயிர் ஊட்டியிருப்பதற்கு மகிழ்ச்சி.
ReplyDelete