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

Đề tài: isbackground là gì? Giải thích giùm mình

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    77

    Mặc định isbackground là gì? Giải thích giùm mình

    Code:
     public class Printer
        {
            public void PrintNumbers()
            {
                Console.WriteLine("=> {0} is executing PrintNumbers()",Thread.CurrentThread.Name);
    
                Console.WriteLine("your number :");
                for (int i = 0; i < 10; i++)
                {
                    Console.Write("{0},",i);
                    Thread.Sleep(2000);
                }
                Console.WriteLine();
    
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("***** The Amazing Thread App *****\n");
                Console.Write("Do you want [1] or [2] threads? ");
                string threadCount=Console.ReadLine();
    
                Thread primaryThread = Thread.CurrentThread;
                primaryThread.Name = "Primary";
    
                Console.WriteLine("=> {0} is executing main():",Thread.CurrentThread.Name);
    
                Printer p = new Printer();
    
                switch (threadCount)
                {
                    case "2":
                        Thread backgroundThread = new Thread(new ThreadStart(p.PrintNumbers));
                        backgroundThread.Name = "secondary";
                        backgroundThread.IsBackground = true;
                        backgroundThread.Start();
                        break;
                    case "1":
                        p.PrintNumbers();
                        break;
                    default:
                        Console.WriteLine("I don't know what you want...you get 1 thread.");
                        goto case "1";
                }
                MessageBox.Show("I'm busy!", "Work on main thread...");
                
            }
        }
    Khi thêm backgroundThread.IsBackground = true; thì khi chọn [2] sẽ out ra ngay , còn khi ko thêm thì vẫn chạy bình thường
    Mình đọc nhưng chưa dc rõ, mong các bạn giải thích giùm mình, thanks
    ===
    Notice that this Main() method is not making a call to Console.ReadLine() to force the console
    to remain visible until you press the Enter key. Thus, when you run the application, it will shut down
    immediately because the Thread object has been configured as a background thread. Given that the
    Main() method triggers the creation of the primary foreground thread, as soon as the logic in Main()
    completes, the AppDomain unloads before the secondary thread is able to complete its work.
    However, if you comment out the line that sets the IsBackground property, you will find that each
    number prints to the console, as all foreground threads must finish their work before the AppDomain
    is unloaded from the hosting process.

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    8

    Theo mặc định, một thread mới được tạo sẽ là foreground, vì vậy nếu bạn bỏ đi dòng
    Visual C# Code:
    1. backgroundThread.IsBackground = true;
    thì backgroundThread sẽ là ForeGround.
    Về foreground và background thread:
    Một ứng dụng chỉ kết thúc khi tất cả ForeGround Thread được terminate, còn background thread sẽ tự động bị tiêu hủy khi ứng dụng End. Khi bạn set thuộc tính
    Visual C# Code:
    1. backgroundThread.IsBackground = true;
    tức là bạn đã cho backgroundThread là BackGround, ngay sau khi thread này được Start, chương trình sẽ thực hiện đoạn lệnh tiếp theo là
    Visual C# Code:
    1. MessageBox.Show("I'm busy!", "Work on main thread...");
    , sau câu lệnh này, chương trình sẽ kết thúc và backgroundThread cũng tiêu luôn. Khi backgroundThread là ForeGround, nó sẽ phải hoàn thành xong nhiệm vụ của mình thì chương trình mới kết thúc được.
    OK, hi vọng là bạn đã hiểu.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    77

    mình hiểu , nhưng chưa hiểu chỗ : khi set backgroungThread la Background thì khi Start sao nó lại chạy thẳng xuống
    Code:
    MessageBox.Show("I'm busy!", "Work on main thread...");
    tại sao nó ko chạy vòng vòng trong Print rồi mới tới messbox
    Đã được chỉnh sửa lần cuối bởi trung : 07-01-2009 lúc 08:09 PM.

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi trung Xem bài viết
    mình hiểu , nhưng chưa hiểu chỗ : khi set backgroungThread la Background thì khi Start sao nó lại chạy thẳng xuống
    Code:
    MessageBox.Show("I'm busy!", "Work on main thread...");
    tại sao nó ko chạy vòng vòng trong Print rồi mới tới messbox
    Chỗ này bạn hiểu nhầm rồi. Sau khi Main Thread thực hiện dòng lệnh
    Visual C# Code:
    1. backgroundThread.Start();
    thì nó sẽ nhảy xuống dòng tiếp theo là MessageBox.Show(...) chứ không hề phụ thuộc vào backgroundThread là BackGround hay ForeGround , sau khi thực hiện MessageBox, Main Thread sẽ thực hiện lệnh tiếp theo là kết thúc chương trình: nếu backgroundThread là BackGround nó sẽ bị hủy ngay dù chưa thực hiện xong công việc và chương trình thực sự kết thúc, ngược lại chương trình sẽ phải đợi backgroundThread sẽ phải thực hiện xong mới có thể kết thúc.
    BTC

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    77

    ok thanks bạn, mình hiểu rồi

  6. #6
    Ngày gia nhập
    01 2008
    Bài viết
    148

    Mặc định isbackground là gì? Giải thích giùm mình

    mà theo mình biết thì Background thread có độ ưu tiên thấp hơn so với ForeGround thread

  7. #7
    Ngày gia nhập
    11 2008
    Bài viết
    77

    khi mình tạo ra second thread thì nó ko làm cho chương trình chạy nhanh hơn, ko làm cho các con số chạy nhanh hơn , nó chỉ shared workload . vậy nếu bạn là end user thì khi chọn [2] sẽ xuất hiện message lên liền => end user tưởng rằng chương trình đã chạy xong thì sẽ tắt chuơng trình
    =====> ko biết sẽ có corrupt gì xảy ra ko ?( bởi vì đây chương trình nhỏ , ko biết chương trình lớn thế nao?)
    thanks

Các đề tài tương tự

  1. Bài tập C++ [HELP]Nhờ các bác vào giải giùm mình máy bài tập c++ này nha
    Gửi bởi thanh_luu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 07-07-2013, 01:52 PM
  2. mình là dân mới, giải giùm mình bài tập này
    Gửi bởi bibiyenbai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 27-04-2010, 08:15 PM
  3. ai kiểm tra lỗi bài đơn giản giùm em nha.
    Gửi bởi thanhle_uit trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 13-02-2009, 11:57 AM
  4. anh em ơi, giải giùm em bài này.
    Gửi bởi baoanh_nguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 15-01-2008, 10:52 PM
  5. Mọi người giải thích giùm em đề bài này cái
    Gửi bởi manutd1988 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 20-10-2007, 11:39 AM

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