Thực hành Hệ điều hành - Bài thực hành số 2.2: Viết phần mềm tạo/dùng/xóa thread và demo tính hiệu quả của lập trình multi-thread

Chạy VS .Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project.
2. Mở rộng mục Visual C# trong TreeView "Project Types", chọn mục Windows, chọn icon
"Windows Form Application" trong listbox "Templates" bên phải, thiết lập thư mục chứa
Project trong listbox "Location", nhập tên Project vào textbox "Name:" (td. TinhTich), click
button OK ₫ể tạo Project theo các thông số ₫ã khai báo.
3. Form ₫ầu tiên của ứng dụng ₫ã hiển thị trong cửa sổ thiết kế, việc thiết kế form là quá
trình lặp 4 thao tác tạo mới/xóa/hiệu chỉnh thuộc tính/tạo hàm xử lý sự kiện cho từng ₫ối
tượng cần dùng trong form.
4. Nếu cửa sổ ToolBox chưa hiển thị chi tiết, chọn menu View.Toolbox ₫ể hiển thị nó (thường
nằm ở bên trái màn hình). Click chuột vào button (Auto Hide) nằm ở góc trên phải cửa
sổ ToolBox ₫ể chuyển nó về chế ₫ộ hiển thị thường trực 
pdf 5 trang xuanthi 30/12/2022 880
Bạn đang xem tài liệu "Thực hành Hệ điều hành - Bài thực hành số 2.2: Viết phần mềm tạo/dùng/xóa thread và demo tính hiệu quả của lập trình multi-thread", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfthuc_hanh_he_dieu_hanh_bai_thuc_hanh_so_2_2_viet_phan_mem_ta.pdf

Nội dung text: Thực hành Hệ điều hành - Bài thực hành số 2.2: Viết phần mềm tạo/dùng/xóa thread và demo tính hiệu quả của lập trình multi-thread

  1. Trang 2 11. Dời chuột về button btnCham, ấn kép chuột vào nó ₫ể tạo hàm xử lý sự kiện Click chuột cho button, cửa sổ mã nguồn sẽ hiển thị ₫ể ta bắt ₫ầu viết code cho hàm. Cách tổng quát ₫ể tạo hàm xử lý sự kiện là chọn ₫ối tượng btnCham, cửa sổ thuộc tính của nó sẽ hiển thị, click icon ₫ể hiển thị danh sách các sự kiện của ₫ối tượng, duyệt tìm sự kiện quan tâm (Click), ấn kép chuột vào comboBox bên phải sự kiện Click ₫ể máy tạo tự ₫ộng hàm xử lý cho sự kiện này. Cửa sổ mã nguồn sẽ hiển thị khung sườn của hàm vừa ₫ược tạo với thân rỗng, viết thân cho hàm này như sau : private void btnCham_Click(object sender, EventArgs e) { //thiết lập chế ₫ộ quyền ưu tiên realtime cho chương trình myPrio = ProcessPriorityClass.BelowNormal; } 11. Dời chuột về button btnNhanh, ấn kép chuột vào nó ₫ể tạo hàm xử lý sự kiện Click chuột cho button, cửa sổ mã nguồn sẽ hiển thị khung sườn của hàm vừa ₫ược tạo với thân rỗng, viết thân cho hàm này như sau : private void btnNhanh_Click(object sender, EventArgs e) { //thiết lập chế ₫ộ quyền ưu tiên realtime cho chương trình myPrio = ProcessPriorityClass.RealTime; } 12. Dời chuột về button btnStart, ấn kép chuột vào nó ₫ể tạo hàm xử lý sự kiện Click chuột cho button, cửa sổ mã nguồn sẽ hiển thị khung sườn của hàm vừa ₫ược tạo với thân rỗng, viết thân cho hàm này như sau : private void btnStart_Click(object sender, EventArgs e) { //xác ₫ịnh ₫ối tượng quản lý process hiện hành MyProc = Process.GetCurrentProcess(); //thay ₫ổi quyền ưu tiên theo yêu cầu người dùng MyProc.PriorityClass = myPrio; //xác ₫ịnh số thread tham gia tính tích 2 ma trận int cnt = Int32.Parse(txtThreads.Text); int i; //ghi nhận thời ₫iểm bắt ₫ầu tính tích DateTime t1 = DateTime.Now; if (cnt == 1) { //dùng thuật giải tuần tự TinhTich(new Params(null, 0, N, 0));
  2. Trang 4 }; //₫ịnh nghĩa 3 biến ma trận double[,] A; double[,] B; double[,] C; //₫ịnh nghĩa biến chứa số hàng/cột của ma trận int N; //₫ịnh nghĩa danh sách trạng thái thi hành của các thread con int[] stateLst = new int [20]; //₫ịnh nghĩa danh sách thời gian thi hành của các thread con System.TimeSpan[] dateLst = new System.TimeSpan[20]; //₫ịnh nghĩa biến miêu tả quyền ưu tiên của chương trình ProcessPriorityClass myPrio = ProcessPriorityClass.Normal; Process MyProc; //₫ịnh nghĩa danh sách các quyền ưu tiên cho các thread ThreadPriority[] tPrio = { ThreadPriority.Lowest, ThreadPriority.BelowNormal, ThreadPriority.Normal, ThreadPriority.AboveNormal, ThreadPriority.Highest}; //₫ịnh nghĩa hàm các hàng ma trận tích theo yêu cầu trong tham số void TinhTich (object obj) { DateTime t1 = DateTime.Now; Params p = (Params)obj; int h, c, k; for (h = p.sr; h < p.er; h++) for (c = 0; c < N; c++) { double s = 0; for (k = 0; k < N; k++) s = s + A[h, k] * B[k, c]; C[h, c] = s; } //ghi nhận ₫ã hoàn thành nhiệm vụ stateLst[p.id] = 1; //ghi nhận thời gian tính dateLst[p.id] = DateTime.Now.Subtract(t1); } 14. Tìm hàm khởi tạo Form1 rồi thêm các lệnh khởi tạo các ma trận A và B như sau : public Form1() { InitializeComponent(); //thêm vào các lệnh khởi tạo sau ₫ây lbKetqua.Items.Clear(); //khởi tạo các ma trận A, B, C N = 1000; A = new double[N,N]; B = new double[N,N]; C = new double[N,N]; int h, c; for (h = 0 ; h < N; h++) for (c = 0; c < N; c++) A[h,c] = B[h,c] = c;