Danh mục

C# và các lớp cơ sở Thread ( luồng ) – Phần 1

Số trang: 14      Loại file: pdf      Dung lượng: 122.41 KB      Lượt xem: 19      Lượt tải: 0    
Thư viện của tui

Hỗ trợ phí lưu trữ khi tải xuống: 5,000 VND Tải xuống file đầy đủ (14 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

1 thread là 1 chuỗi liên tiếp những sự thực thi trong chương trình. trong 1 chương trình C# ,việc thực thi bắt đầu bằng phương thức main() và tiếp tục cho đến khi kết thúc hàm main(). Cấu trúc này rất hay cho những chương trình có 1 chuỗi xác định những nhiệm vụ liên tiếp . nhưng thường thì 1 chương trình cần làm nhiều công việc hơn vào cùng một lúc.ví dụ trong internet explorer khi ta đang tải 1 trang web thì ta nhấn nút back hay 1 link nào đó , để làm việc...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Thread ( luồng ) – Phần 1 C# và các lớp cơ sở Thread ( luồng ) – Phần 11 thread là 1 chuỗi liên tiếp những sự thực thi trong chương trình. trong 1chương trình C# ,việc thực thi bắt đầu bằng phương thức main() và tiếp tụccho đến khi kết thúc hàm main().Cấu trúc này rất hay cho những chương trình có 1 chuỗi xác định nhữngnhiệm vụ liên tiếp . nhưng thường thì 1 chương trình cần làm nhiều côngviệc hơn vào cùng một lúc.ví dụ trong internet explorer khi ta đang tải 1trang web thì ta nhấn nút back hay 1 link nào đó , để làm việc này InternetExplorer sẽ phải làm ít nhất là 3 việc : - Lấy dữ liệu đưọc trả về từ internet cùng với các tập tin đi kèm . - Thể hiện trang web - Xem người dùng có nhập để làm thứ gì khác khôngĐể đơn giản vấn đề ta giả sử Internet Ecplorer chỉ làm 2 công việc : - Trình bày trang web - Xem người dùng có nhập gì khôngĐể thực hành việc này ta sẽ viết 1 phương thức dùng để lấy và thể hiện trangweb .giả sử rằng việc trình bày trang web mất nhiều thời gian ( do phải thihành các đoạn javascript hay các hiệu ứng nào đó .. ) .vì thế sau một khoảngthời gian ngắn khoảng 1/12 giây , phương thức sẽ kiểm tra xem người dùngcó nhập gì không .nếu có thì nó sẽ đuơc xử lí, nếu không thì việc trình bàytrang sẽ được tiếp tục. và sau 1/12 giây việc kiểm tra sẽ được lặp lại.tuynhiên viết phương thức này thì rất phức tạp do đó ta sẽ dùng kiến trúc eventtrong window nghĩa là khi việc nhập xảy ra hệ thống sẽ thông báo cho ứngdụng bằng cách đưa ra một event . ta sẽ cập nhật phương thức để cho phépdùng các event :Ta sẽ viết 1 bộ xử lí event để đáp ứng đối với việc nhập của người dùng.Ta sẽ viết 1 phương thức để lấy và trình bày dữ liệu . phương thức này đượcthực thi khi ta không làm bất cứ điều gì khác.Ta hãy xem cách phương thức lấy và trình bày trang web làm việc : đầu tiênnó sẽ tự định thời gian. trong khi nó đang chạy, máy tính không thể đáp ứngviệc nhập của người dùng . do đó nó phải chú ý đến việc định thời gian đểgọi phương thức kiểm tra việc nhập của người dùng ,nghĩa là phương thứcvừa chạy vừa quan sát thời gian.bên cạnh đó nó còn phải quan tâm đến việclưu trữ trạng thái trước khi nó gọi phương thức khác để sau khi phương thứckhác thực hiện xong nó sẽ trả về đúng chỗ nó đã dừng.Vào thời window 3.1đây thực sự là những gì phải làm để xử lí tình huống này. tuy nhiên ở NT3.1và sau đó là windows 95 đã có việc xử lí đa luồng điều này làm việc giảiquyết vấn đề tiện lợi hơn.Các ứng dụng với đa luồngTrong ví dụ trên minh hoạ tình huống 1 ứng dụng cần làm nhiều hơn 1 côngviệc.vì vậy giải pháp rõ ràng là cho ứng dụng thực thi nhiều luồng. như ta đãnói ,1luồng đaị diện cho 1 chuỗi liên tiếp các lệnh mà máy tính thực thi . dođó không có lí do nào 1 ứng dụng lại chỉ có 1 luồng.thực vậy ta có thể cónhiều luồng nếu ta muốn. tất cả điều cần là mỗi lần ta tạo 1 luồng thực thimới, ta chỉ định 1 phương thức mà thực thi nên bắt đầu với. luồng đầu tiêntrong ứng dụng luôn được thực thi trong main() vì đây là phương thức mà.NET runtime luôn lấy để bắt đầu.các luồng sau sẽ được bắt đầu bên trongứng dụng.Công việc này làm như thế nào ?- Một bộ xử lí chỉ có thể làm một việc vào một lúc,nếu có một hệ thống đaxử lí , theo lí thuyết có thể có nhiều hơn một lệnh được thi hành đồng bộ,mỗi lệnh trên một bộ xử lí, tuy nhiên ta chỉ làm việc trên một bộ xử lí do đócác công việc không thể xảy ra cùng lúc.thực sự thì hệ điều hành windowlàm điều này bằng một thủ tục gọi là pre emptive multitasking- Thủ tục này nghĩa là window lấy 1 luồng vào trong vài tiến trình và chophép luồng đó chạy 1 khoảng thời gian ngắn .gọi là time slice. khi thời giannày kế thúc. window lấy quyền điều khiển lại và lấy 1 luồng khác và lại cấp1 khoảng thời gian time slice . vì khoảng thời gian này quá ngắn nên ta cócảm tưởng như mọi thứ đều xảy ra cùng lúc.- Thậm chí khi ứng dụng ta chỉ có một luồng thì thủ tục này vẫn đưọc dùngvì có thể có nhiều tiến trình khác đang chạy trên hệ thống mỗi tiến trình cầncác time slice cho mỗi luồng của nó.vì vậy khi ta có nhiều cửa sổ trên mànhình mỗi cái đại diện cho một tiến trình khác nhau, ta vẫn có thể nhấn vàobất kì của sổ nàoVà nó đáp ứng ngay lập tức.thực sự việc đáp ứng nay không phải ngay lậptức- nó xảy ra vào sau khoảng thời gian time slice của luồng đương thời.vìthời gia này quá ngắn nên ta cảm thấy như nó đáp ứng ngay lập tức.Thao tác luồngLuồng được thao tác bằng cách dùng lớp Thread nằm trong namespaceSystem.Threading . 1 thể hiện của luồng đaị diện cho 1 luồng.ta có thể tạocác luồng khác bằng cách khởi tạo 1 đối tượng luồngBắt đầu 1 luồngGiả sử rằng ta đang viết 1 trình biên tập hình ảnh đồ hoạ, và người dùng yêucầu thay đổi độ sâu của màu trong ảnh. ta bắt đầu khởi tạo 1 đối tượng luồngnhư sau :// entryPoint được khai báo trước là 1 delegate kiểu ThreadStartThread ...

Tài liệu được xem nhiều: