Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Lập trình với ngắt thời gian

  1. #1
    Ngày gia nhập
    08 2018
    Bài viết
    0

    Mặc định Lập trình với ngắt thời gian

    Giả sử em có 1 đoạn chương trình, Liệt kê tất cả các số nguyên tố tăng dần như 2 3 5 7 11 13 17...
    Em cần viết 1 đoạn code C++ sử dụng ngắt thời gian(timer interrupt) để cài 1 ngắt -"Dừng chương trình và xuất tất cả những kết quả đã tính được."
    Ai có tài liệu về sử dụng ngắt này bằng tiếng Việt hoặc cho em xin đoạn code này lun. Em dốt tiếng Anh ko phải tại em lười.Hihi.

    Lưu ý đây là sử dụng ngắt của hệ thống nên không ảnh hưởng tốc độ xử lý của thuật toán.
    Ví dụ như hết thời gian làm bài (t định trước là 30s chẳng hạn) thì gọi ngắt này và dừng tính toán, lưu hết kết quả đã tính được ra file bài làm.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    514

    Ngắt thì dễ thôi. Nhưng làm sao biết được kết quả nào đã tính được thì khó đấy.

    Quá trình A (kiểm soát) ngắt quá trình B (tính toán). Cái này dễ.

    Quá trình B không hay biết gì về việc bị ngắt. Quá trình A không hay biết gì về thời điểm nào có thể ngắt. Nên dữ liệu ở thời điểm ngắt có thể đúng. Hoặc sai. Nghĩa là dữ liệu không còn nữa, chỉ còn 1 đống rác.

    Cần làm cho quá trình A và B "hiểu" nhau, ví dụ

    (a) B báo hiệu tình trạng của mình (ngắt được hay không). Trước khi bắt đầu cập nhật dữ liệu, báo hiệu cấm ngắt. Sau khi cập nhật dữ liệu xong, báo hiệu cho phép ngắt. Đây là phương pháp đợi em nhé. Cái này khó.

    (b) Thiết kế 1 cấu trúc dữ liệu và thuật toán đặc biệt cho B để dữ liệu của nó luôn luôn toàn vẹn, sẵn sàng ngắt bất cứ lúc nào. Và hạn chế A chỉ đọc dữ liệu, không cập nhật dữ liệu. Đây là phương pháp anh cứ đi. Khó hơn.

    (c) Thiết kế 1 cấu trúc dữ liệu và thuật toán đặc biệt hơn để cả B lẫn A đều có thể cập nhật dữ liệu (B sản xuất dữ liệu còn A tiêu thụ dữ liệu). Đây là phương pháp ông ăn chả bà ăn nem. Rất khó.

    Các phương pháp (a), (b), (c) nói chung đều khó làm, dù trên lý thuyết thì đều làm được nhưng cái khó là chúng ảnh hưởng đến tốc độ của thuật toán.
    Đã được chỉnh sửa lần cuối bởi Ada : 09-10-2018 lúc 10:37 PM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    08 2018
    Bài viết
    0

    Dạ.Em có 1 số ví dụ dễ hiểu và thực dụng hơn đó là:
    a. 1 chuơng trình đánh cờ tự động nó cần bít đến thời gian còn lại của trận đấu.
    b. Chương trình diệt virus trên totalWeds. nó hạn định 1 thời gian cần thiết để thông báo tình trạng của các AntiVirus như: có hay ko có virut hay ko đủ thời gian tính.
    c.Các chuơng trình chấm điểm các Phần mềm nói chung và AV nói riêng đều Phân tích các kết quả trả về của các chương trình trên 1 tập các mẫu Test sau 1 thời gian
    giới hạn.
    Tất nhiên nó phải chạy độc lập và không làm ảnh hưởng đến kết quả riêng của các phần mềm.
    Và tất nhiên chúng sử dụng ngắt hệ thống. Chứ chúng đâu có tự tính thời gian đâu,nếu không mún chiếm dụng tài nguyên các phần mềm kia.
    Ví dụ cái đồng hồ windows nào cũng có. Cái chương trình hiển thị đồng hồ nó sử dụng ngắt thời gian hệ thống để mà hiển thị thay đổi mỗi phút hoặc mỗi giây (1 s nó tính được 10 nghìn chu kì chẳng hạn). Ngắt của nó được tạo ra bằng phần cứng. Ví dụ sau mỗi 10 nghìn chu kì số giây tăng lên 1.
    Mún sử dụng các ngắt hệ thống thì phải sử dụng 1 bảng các Vecto Ngắt cung cấp bởi hệ điều hành, thừa hưởng từ BIOS hay hệ nền. Ví dụ sẽ có 1 số vecto Ngắt được WIn sử dụng và thay đổi để điều khiển các thiết bị phần cứng.
    Đó là tất cả những gì em còn nhớ khi học PASCAL nay qua C++ ko có tài liệu về ngắt hệ thống, cụ thể là ngắt thời gian. Liệu ai bít hay có tài liệu tiếng Việt share cho em được em cảm ơn.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    514

    Đồng hồ là tương đối đơn giản, nên việc lấy giờ thường được thực hiện bằng cơ chế ngắt, nói rõ hơn, ngắt theo phương pháp "đợi em nhé" (a). Cụ thể, ngắt thời gian được định thời và xử lý ở cấp độ hệ điều hành; dữ liệu (thanh ghi của phần cứng định thời) được đọc và cập nhật trong chế độ bảo vệ cấm ngắt, thường là tuyệt đối, nghĩa là ở cấp ưu tiên cao nhất hay nói cách khác, không có phần mềm ứng dụng hay phần mềm hệ thống nào được phép ngắt thủ tục xử lý ngắt thời gian. Vì thế, ngắt thời gian là việc mà lập trình viên không cần quan tâm, trừ khi viết hệ điều hành hay viết ứng dụng nhúng (bao gồm cả hệ điều hành và ứng dụng).

    Thứ bạn quan tâm có lẽ không phải là ngắt, mà là cách tạo và sử dụng đồng hồ phần mềm (timer) riêng cho ứng dụng của bạn, hoặc ở mức thấp hơn nữa, cách cắm (hook) một hàm gọi sau (callback) vào một biến cố (event) nào đó liên quan đến đồng hồ, do hệ điều hành định nghĩa, mà thôi.
    Đã được chỉnh sửa lần cuối bởi Ada : 17-10-2018 lúc 03:51 PM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn