- Về thái độ:
2. Xử lý file cùng thư mục
TUYẾN (THREAD) VÀ TIẾN TRÌNH (PROCESS)
1. Xử lý đa tuyến – Khái niệm
Những hệ điều hành Linux và Windows là những hệ thống đa nhiệm cho phép bạn chạy nhiều hệ điều hành cùng lúc. Như bạn biết, một chương trình đơn giản là một danh sách các chỉ lệnh CPU để thực thi một nhiệm vụ đặc biệt. Trước khi thực hiện một chương trình, chỉ thị lệnh phải cư trú bên trong bộ nhớ truy cập ngẫu nhiên của máy tính (ram).
Nói chung, bạn có thể xem chương trình như một danh sách các chỉ thị lệnh còn tiến trình như một đối tượng chứa các thông tin về chương trình đang chạy. Mỗi khi chạy một chương trình Windows tạo ra một tiến trình mới để giữ những thông tin tài nguyên và trạng thái của chương trình.
Ví dụ, bạn có ba chương trình chạy (tiến trình 1, 2 và 3), Windows sẽ thực thi một số chỉ lệnh của tiến trình 1 trong vòng một khoảng mini-giây. Tiếp đến chuyển đổi đẻ xử lý tiến trình 2 một ít mini-giây nữa và sau cùng là sử lý tiến trình 3. Do hệ điều hành chuyển đổi chỉ thị CPU rất nhanh nên bạn sẽ có cảm giác là các chương trình chạy cùng lúc.
2. Xử lý Thread
2.1. Tạo và chạy nhiều Thread
Thread tương ứng với một chương trình thực thi, để sử dụng thread trong một chương trình Visual basic 2005, bạn trước hết phải tạo ra một đối tượng thread cho mỗi thread mà bạn lập kế hoạch sử dụng. Ví dụ, đoạn mã sau tạo ra 3 đối tượng thread X, Y và Z:
Dim X As System.Threading.Thread Dim Y As System.Threading.Thread Dim Z As System.Threading.Thread
Một thread thực thi một tập các thị lệnh trong chương trình của bạn. Khi bạn tạo ra một thể hiện của thread bạn phải bạn phải chỉ rõ bạn phải chỉ rõ địa chỉ những phát biểu lệnh đầu tiên mà thread sẽ thực thi à thường là địa chỉ của một chương trình con và thủ tục.
Các phát biểu sau sẽ gán các địa chỉ lệnh thực thi khác nhau cho đối tượng thread. Thread A sẽ bắt đầu thực thi thủ tục DisplayA tương tự B là DisplayB và C là DisplayC:
A = New Threading.Thread(AddressOff DisplayA) B = New Threading.Thread(AddressOff DisplayB) C = New Threading.Thread(AddressOff DisplayC)
AddressOff là một chỉ lệnh đặc biệt của ngôn ngữ Visual Basic. Nó cho phép xâm nhập vào vùng địa chỉ nơi hàm địa chỉ nơi hàm tồn tại trong bộ nhớ. Với hàm AddressOff bạn có thể thực hiện những tác vụ cực mạnh tương đương với khái niệm con trỏ trong ngôn ngữ C truyền thống.
Mỗi thủ tục trong trường hợp này, khá đơn giản, thực thi vòng lặp in ra tên thread (như “A”, “B” hoặc “C”) 100 lần, sau đó kết thúc chương trình con và hủy bỏ thread.
Sub DisplayA()
105 Console.Write(“A”)
Next End Sub
Để khởi động thực thi thread, mã chương trình phải gọi phương thức Start của lớp thread như sau:
A.Start() B.Start() C.Start()
2.2. Đặt thread vào trạng thái chờ ngủ (sleep)
Tùy thuộc vào xử lý của thread trong chương trình mà sẽ có lúc bạn cần đình chỉ sự thực thi của thread trong một khoảng thời gian nào đó. Ví dụ, bạn tạo thread để theo dõi tài nguyên sử dụng của server. Bên trong chương trình bạn có thể sử dụng thời gian định kỳ để kiểm tra ký ức sẵn có, một giây để khảo sát không gian đĩa còn trống và 3 giây kiểm tra kết nối của người dùng từ xa tới server. Tùy vào nhu cầu bạn có thể muốn đánh thức thread và thực thi xử lý mỗi phút hoặc có thể là 10 phút một lần. Để dừng thread trong một khoảng thời gian, bạn có thể sử dụng phương thức Sleep do lớp thread cung cấp. Chẳng hạn, phát biểu sau sẽ đặt dừng (hay ngủ) khoảng 7000 mili-giây (1 giây = 1000 mini-giây).
Thread.Sleep(7000)
Khi bạn đặt thread vào trạng thái ngủ bằng phương thức Sleep, thread sẽ không thực thi và không tiêu thụ tài nguyên CPU.
Chương trình ThreadSleep.vb sau khởi động 3 thread. Sau đó sử dụng phương thức Sleep để đình chỉ một thread trong vòng 0.3 giây, 0.1 giây và 0.8 giây.
2.3. Dừng, Khởi động lại, hủy bỏ thread
Trong chương trình của bạn sử dugj thread thực thi xử lý những tác vụ đặc biệt. Bạn sử dụng Sleep để dừng thread trong một thời gian biết trước. tuy nhiên, nếu không biết được thời gian dừng là bao nhiêu lâu bạn có thể gọi phương thức Suspend để dừng vô thời hạn một thread.
Mythread.Suspend()
Tương tự Sleep, Suspend đưa thread vào trạng thái ngủ nhưng không có thời gian tự động thức dậy. để đánh thưc thread dậy hoạt động trở lại bạn gọi phương thức Resume như sau:
Mythread.Resume()
Nếu không muốn sử dụng thread nữa bạn có thể hủy thread để hệ thống giải phóng tài nguyên bằng cách gọi Abort() như sau:
Mythread.Abort()
2.4. Lấy thông tin về thread
Muốn biết thông tin thread đang hoạt động, lớp thread cung cấp cho bạn rất nhiều phương thức như IsAlive xác định thread còn hoạt động hay không, Priority xác định độ ưu tiên, threadState xác định trạng thái của thread.
2.5. Chờ thread khác hoàn thành các tác vụ sử lý
Khi chương trình của bạn sử dụng thread để xử lý, sẽ có lúc bạn cần chờ xử lý, sẽ có lúc bạn cần chờ thread khác hoạt đông xong thì thread nào đó mới tiếp tục xử lý. Lớp thread cung cấp cho bạn phương thức Join.
106 Downloading.Join()
2.6. Điều khiển quyền ưu tiên thread
Khi ứng dụng Visual basic 2005 sử dụng nhiều thread thực thi, hệ thống sẽ gán thời gian chiếm giữ CPU cho mỗi thread. Khi thread đang chạy, thường thì hệ thống sẽ dành cho thread 33% thời gian CPU. Nên nhớ rằng, trong một hệ điều hành đa nhiệm như Windows, hệ điều hành chia sẻ thời gian sử dụng CPU cho từng ứng dụng lần lượt sử dụng.
Tùy thuộc vào xứ lý mà thread thực thi trong ứng dụng của bạn, sẽ có lúc thread thực thi này quan trọng hơn những thread khác. Trong những trường hợp như vậy, chương trình của bạn có thể đặt cho thread một quyền ưu tiên cao hơn, khiến cho thread có nhiều thời gian chiếm lĩnh CPU hơn. Để tăng hoặc giảm quyền ưu tiên của thread, bạn gán giá trị ưu tiên cho thuộc tính Priority của lớp thread. Namespace System.Threading.ThreadPriority cung cấp các hằng số giá trị ưu tiên bao gồm: Lowest (thấp nhất), BelowNormal (dưới mức bình thường), Normal (bình thương), AboveNormal (tren mức bình thường), Highest (cao nhất). Ví dụ sau gán quyền ưu tiên cao nhất cho thread Downloader:
107
Chương 11
Lập trình Windows Service 1. Giới thiệu về Windows Services
Trong môi trường Windows, một Service (dịch vụ) là một chương trình đặc biệt chạy phía hậu cảnh để thực hiện một nhiệm vụ nào đó. Ví dụ như hàng đợi máy in cần một dịch vụ (Service) giám sát quá trình xử lý các tác vụ in tài liệu do chương trình ứng dụng gửi đến. Tương tự, dịch vụ Internet Information Services (IIS) chạy phía hậu cảnh để gửi những trang Web và file về trình duyệt (browser) của một máy khách truy xuất Internet. Visual Studio cho phép người lập trình dễ dàng tạo ra những dịch vụ Windows Services. Trong chương này, bạn sẽ học cách tạo những chương trình con mà mỗi Service phải cung cấp để giao tiếp với Windows. Bạn sẽ từng bước thực hiện các thiết lập và chạy Service mỗi khi Windows khởi động. Chúng ta sẽ nghiên cứu về cách xây dựng một Service đơn giản trong Windows, cài đặt và loại bỏ Service. Bạn sẽ học sử dụng lớp ServiceBase cũng như ghi sự kiện của Service ra Event Log, yêu cầu Service thực hiện tác vụ theo định kỳ thời gian. Chúng ta cũng sẽ học sử dụng Thread trong Service, cách thông báo cho người quản trị khi có vấn đề xảy ra với hệ thống và cuối cùng chúng ta sẽ tích hợp chương trình FileSystemWatcher trong chương 2 thành một dịch vụ Windows Service.
Để xem danh sách Windows service bạn thực hiện các bước sau: 1. Start / Settings / Control Panel.
2. Trong cửa sổ Control Panel chọn Administrative Tools. 3. Trong cửa sổ Administrative Tools chọn biểu tượng Services.
Visual Studio cho phép bạn dễ dàng tạo ra một dịch vụ Windows Service. Tạo Service cũng tương tự như tạo một chương trình bình thường. Visual Studio sẽ sinh ra bộ khung để bạn thêm mã vào điều khiển các chức năng của Service.