Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Cho mình hỏi về cách dùng CEvent để thông báo sự kiện dừng thread

  1. #1
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Thumbs up Cho mình hỏi về cách dùng CEvent để thông báo sự kiện dừng thread

    Mình tạo 1 worker thread và nhiệm vụ của nó là lặp vô tận 1 công việc nào đó, nhưng muốn kiểm tra xem có thông báo dừng thread từ main thread không để break cái vòng lặp vô tận đó. Mình nghe nói là dùng CEvent nhưng không biết dùng thế nào, các bạn có thể giúp mình đươc không.

    C++ Code:
    1. CEvent ev;
    2. CWinThread* hThread;
    3.  
    4. // Nhấn vào Button 1 để tạo và chạy thread;
    5. void CMfc_examDlg::OnButton1()
    6. {
    7.     int n=ev.ResetEvent();
    8.  
    9.     hThread = AfxBeginThread(MyThreadProc, LPVOID(NULL));
    10. }
    11.  
    12. // Nhấn vào Button 2 để ra tín hiệu kết thúc thread;
    13. void CMfc_examDlg::OnButton2()
    14. {
    15.     //Ra tín hiệu CEvent để kết thúc thread ở đây;
    16.     int n = ev.SetEvent();
    17. }
    18.  
    19. // Đây là Thread con;
    20. UINT CMfc_examDlg::MyThreadProc(LPVOID pparam)
    21. {
    22.     for (;;)
    23.     {
    24.         // Thực hiện công việc.
    25.         // ...
    26.         // Sleep(200);
    27.         // Kiểm tra tín hiệu CEvent dể break vòng lặp;
    28.     }
    29.     return 0;
    30. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi DKhanh : 06-10-2008 lúc 06:24 PM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Theo mình thì bạn nên có một biến toàn cục làm cờ, main thread sẽ set biến này và thread kia sẽ kiểm tra biến này liên tục để xem main thread có kêu dừng hay ko.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Theo mình thì bạn nên có một biến toàn cục làm cờ, main thread sẽ set biến này và thread kia sẽ kiểm tra biến này liên tục để xem main thread có kêu dừng hay ko.
    Mình nghĩ làm như vậy không an toàn bạn ơi..., nó bị đụng độ, vi phạm Thread-Safe. Phải dùng CSingleLock ..., vả lại mình muốn dùng CEvent để hiểu rõ tác dụng của CEvent.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình cũng ko rành CEvent nên cũng ko giúp bạn được. Nhưng nếu chỉ để giải quyết vấ đề dừng thread thì trong main thread bạn gọi hàm SuspendThread là chắc chắn an toàn.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    9

    Thử lại coi thế nào

    Code:
    CEvent ev;
    CWinThread* hThread;
    
    // Nhấn vào Button 1 để tạo và chạy thread;
    void CMfc_examDlg::OnButton1()
    {
        int n=ev.ResetEvent();
    
    	//	Pass event-handle to thread's param
        hThread = AfxBeginThread(MyThreadProc, LPVOID(ev.m_hObject));
    }
    
    // Nhấn vào Button 2 để ra tín hiệu kết thúc thread;
    void CMfc_examDlg::OnButton2()
    {
        //Ra tín hiệu CEvent để kết thúc thread ở đây;
        int n = ev.SetEvent();
    }
    
    // Đây là Thread con;
    UINT CMfc_examDlg::MyThreadProc(LPVOID pparam)
    {
    	HANDLE hEndThread = (HANDLE)pparam;
    
    	while (WaitForSingleObject(hEndThread, 200) == WAIT_OBJECT_0)
    	{
    		// Thực hiện công việc.
    		// ...
    
    		// Sleep(200); <- now you can remove this line
    
    		// Kiểm tra tín hiệu CEvent dể break vòng lặp;
    	}
    
    	return 0;
    }

  6. #6
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Mặc định Cho mình hỏi về cách dùng CEvent để thông báo sự kiện dừng thread

    OK, cảm ơn bạn, mình chạy được rồi.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Chương trình không ổn định khi dùng Multi Thread, xử lý thế nào?
    Gửi bởi mvmanh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 21-11-2012, 10:41 PM
  2. demo multi thread + CEvent + SendMessage
    Gửi bởi nthung trong diễn đàn Dự án & Source code VC++
    Trả lời: 0
    Bài viết cuối: 21-06-2012, 10:42 AM
  3. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  4. Socket vẫn bị lỗi khi dùng Thread? không thể gán giá trị vào textbox trong Thread ^^!
    Gửi bởi lion080889 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 16-07-2011, 06:35 PM
  5. lỗi Cross-thread operation not valid khi dùng thread
    Gửi bởi Riku trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 13-04-2011, 02:50 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