Thông báo

Collapse
No announcement yet.

Làm thế nào để ưu tiên một tiến trình?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Làm thế nào để ưu tiên một tiến trình?

    Khi lập trình trong WINDOWS(VB,VC chẳng hạn), thì làm thế nào để ưu tiên một tiến trình nào đó chạy ở mức ưu tiên hơn?
    Ví dụ:em muốn ưu tiên timer, hay ưu tiên cổng nối tiếp, và làm như vậy có khó quá sức ko?có phải can thiệp gì vào Kernel ko?
    Rất mong các anh chỉ bảo!


  • #2
    Lập tình multi-thread trong tập 5 sách của Samis về VC++ có nói rất rõ vấn đề này
    Vẫn biết mỗi lần xa là một lần về lại...

    Comment


    • #3
      Nguyên văn bởi thaithutrang
      Khi lập trình trong WINDOWS(VB,VC chẳng hạn), thì làm thế nào để ưu tiên một tiến trình nào đó chạy ở mức ưu tiên hơn?
      Ví dụ:em muốn ưu tiên timer, hay ưu tiên cổng nối tiếp, và làm như vậy có khó quá sức ko?có phải can thiệp gì vào Kernel ko?
      Rất mong các anh chỉ bảo!
      IO của hệ thống không có khái niệm ưu tiên vì OS không cho phép 2 tiền trình đồng thời sử dụng IO. Ưu tiên chỉ áp dụng với khái niệm task-switch time thôi.
      Cô bé này ham muốn nhiều quá, sợ!!!!!!!!!!
      Nếu muốn 2 process cùng truy cập vào cổng COM thì vẫn có thể thực hiện bằng software chứ OS không hỗ trợ. Cô bé thân yêu hãy làm theo anh

      1. Tạo 1 service bound lấy một hay nhiều cổng COM.
      2. Tạo các process cần thiết connect tới service kia.
      3. Khi cần truy cập vào cổng COM nào thì process sẽ đưa yêu cầu sử dụng cổng COM đó đến service, service sẽ có nhiệm vụ đưa dữ liệu ra cổng nối tiếp và tránh xung đột với các yêu cầu của các process khác.


      Comment


      • #4
        Nguyên văn bởi thaithutrang
        Khi lập trình trong WINDOWS(VB,VC chẳng hạn), thì làm thế nào để ưu tiên một tiến trình nào đó chạy ở mức ưu tiên hơn?
        Ví dụ:em muốn ưu tiên timer, hay ưu tiên cổng nối tiếp, và làm như vậy có khó quá sức ko?có phải can thiệp gì vào Kernel ko?
        Rất mong các anh chỉ bảo!
        IO của hệ thống không có khái niệm ưu tiên vì OS không cho phép 2 tiền trình đồng thời sử dụng IO. Ưu tiên chỉ áp dụng với khái niệm task-switch time thôi.

        Cô bé này ham muốn nhiều quá, sợ!!!!!!!!!!

        Nếu muốn 2 process cùng truy cập vào cổng COM thì vẫn có thể thực hiện bằng software chứ OS không hỗ trợ. Cô bé thân yêu hãy làm theo anh

        1. Tạo 1 service bound lấy một hay nhiều cổng COM.
        2. Tạo các process cần thiết connect tới service kia.
        3. Khi cần truy cập vào cổng COM nào thì process sẽ đưa yêu cầu sử dụng cổng COM đó đến service, service sẽ có nhiệm vụ đưa dữ liệu ra cổng nối tiếp và tránh xung đột với các yêu cầu của các process khác.


        Comment


        • #5
          Để ưu tiên một tác vụ nào đó ngoài cách lập trình multitask còn cách sau, trong chương trình của bạn thì dùng ý tưởng của multitask để ưu tiên một nhiệm vụ nào đó.
          Còn chương trình chình thì set quyền ưu tiên cho nó nên mức highest, bạn nhấn alt+ctrl+delete vào taskmanager, bấm phải chuột vào một chương trình nào đó có cái prioty, chọn highest. Lúc này chương trình của bạn được quan tâm nhất, thâm chí làm treo các chương trình khác.
          Code để set quyền ưu tiên thì tui đã làm được bằng borland delphi, để về chuyển sang VB giúp bạn.

          Comment


          • #6
            Mình xin có vài ý kiến trong phần kiến thức hổ lốn của minh về vấn đề này:

            1. Khi lập trình trong WINDOWS(VB,VC chẳng hạn), thì làm thế nào để ưu tiên một tiến trình nào đó chạy ở mức ưu tiên hơn?

            Ngày xưa khi mình làm bằng VC mình hay dùng API
            AfxBeginThread
            CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

            trong đó có tham số đặt mức độ ưu tiên

            2. Timer hay COM là các tài nguyên của máy tính - hình như không có khái niệm ưu tiên - khái niệm ưu tiên hình như chỉ có trong process (mình hay nhầm lẫn giữa task, process, thread ). Khi làm việc với tài nguyên thì hình như theo mình biết không phải như bạn Cường nói : OS không cho phép 2 tiền trình đồng thời sử dụng IO
            Vẫn có thể cho phép hai hay nhiều tiến trình đồng thời sử dụng IO nhưng mình phải có cơ chế quản lí và đồng bộ tốt, và cũng nói kỹ hơn đa số OS support chứ không phải tất cả

            Mong được học hỏi nhiều từ các bác

            Comment


            • #7
              IO tôi muốn nói đến là các cổng vào ra như COM, LPT. Hệ điều hành không cho phép 2 tiến trình cùng mở đồng thời 1 cổng COM hay LPT thì làm sao có khái niệm ưu tiên cho chúng được. Còn các tài nguyên khác thì được như ShareMem, FileIO, bus ...
              nad nick rất quen, có phải nad bên hva không nhỉ?

              Comment


              • #8
                Hic! Dạ em la nad ở bên HVA, do hoàn cảnh bắt buộc em bây giờ phải đi học phần cứng cùng làm firmware nên nên đăng ký qua đây để học hỏi các bác, mong được các bác giúp đỡ

                Comment


                • #9
                  Nguyên văn bởi thaithutrang
                  Khi lập trình trong WINDOWS(VB,VC chẳng hạn), thì làm thế nào để ưu tiên một tiến trình nào đó chạy ở mức ưu tiên hơn?
                  Ví dụ:em muốn ưu tiên timer, hay ưu tiên cổng nối tiếp, và làm như vậy có khó quá sức ko?có phải can thiệp gì vào Kernel ko?
                  Rất mong các anh chỉ bảo!
                  khi lập trình cho multiThread thì đặt chế độ ưu tiên vào tham số khi tạo Thread . còn các thiết bị ngoại vi như timer , COM thì làm việc thông qua ngắt , chắc là chị phải can thiệp vào bộ xử lý ngắt ưu tiên dành cho PC , bình thường ở chế độ mặc định thì timer là có mức ưu tiên cao nhất
                  -> không biết có cách viết chương trình điều khiển thay đổi chế độ mặc định này không nhỉ?
                  bác nào biết chỉ cho em với
                  how to begin with Embedded system???

                  Comment


                  • #10
                    Sao các bạn không sử dụng ngắt nhỉ ( nếu giao tiếp thiết bị ) ?
                    Mạch nạp Little Programmer
                    MSC-51,AVR,EEPROM ... etc

                    Site Fukusei shop :

                    Comment


                    • #11
                      Có thể sử dụng API sau, nếu tiến trình đang chạy

                      BOOL SetPriorityClass(
                      HANDLE hProcess,
                      DWORD dwPriorityClass
                      );

                      Với API đơn thuần thì không lập trình ngắt được cho Windows mà phải dùng Hook, thậm chí bây dừ họ cũng không dùng đến hook nữa mà chỉ sử dụng event đơn thuần thôi thì phải.

                      Dùng sevice riêng là đúng đấy nhưng ứng dụng có cần tới mức hoành tráng như vậy không?

                      Comment

                      Về tác giả

                      Collapse

                      thaithutrang Tìm hiểu thêm về thaithutrang

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X