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

Đề tài: Lập trình QT C++: Thoát khỏi 1 hàm có vòng lặp vô tận trong thread?

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

    Mặc định Lập trình QT C++: Thoát khỏi 1 hàm có vòng lặp vô tận trong thread?

    Đây là hàm run() của mình:
    C++ Code:
    1. void Thread::run()
    2. {
    3.       .............
    4.       pcap_loop(descr,-1,my_callback,(u_char*)this); // Hàm có vòng lặp mãi mãi
    5.       .............
    6. }

    Có ai biết có cách nào để thoát ra ngay lập tức cái hàm này ko?
    Cám các bạn trước nhé!

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

    bạn thử bỏ câu lệnh return vào xem nào
    Tham gia diễn đàn MACOS http://www.apple9.com/forum

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

    Việc này rất khó và phụ thuộc rất nhiều yếu tố. Mình ví dụ cho bạn hiểu ý tưởng thôi :

    C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <conio.h>
    4.  
    5. void LoopForever()
    6. {
    7.     while (true);
    8. }
    9.  
    10. DWORD WINAPI ThreadProc(LPVOID lpParameter)
    11. {
    12.     printf("Begin loop\n");
    13.  
    14.     LoopForever();
    15.  
    16.     printf("End loop\n");
    17.     return 0;
    18. }
    19.  
    20. int main(int argc, char* argv[])
    21. {
    22.     printf("Create thread\n");
    23.    
    24.     DWORD tid = 0;
    25.     HANDLE hThread = CreateThread(NULL,0,ThreadProc,NULL,0,&tid);
    26.  
    27.     printf("Press any key to exit LoopForever function ...\n");
    28.     getch();
    29.  
    30.     BOOL result;
    31.     CONTEXT context;
    32.  
    33.     result = SuspendThread(hThread);
    34.  
    35.     context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
    36.     result = GetThreadContext(hThread,&context);
    37.  
    38.     context.Esp = context.Ebp + sizeof(DWORD) * 2;
    39.     DWORD *pstack = (DWORD *)context.Esp;
    40.     context.Ebp = pstack[-2];
    41.     context.Eip = pstack[-1];
    42.  
    43.     result = SetThreadContext(hThread,&context);
    44.     result = ResumeThread(hThread);
    45.  
    46.     printf("Press any key to exit program ...\n");
    47.     getch();
    48.  
    49.     CloseHandle(hThread);
    50.  
    51.     return 0;
    52. }
    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.

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

    Cái này chắc là nó phụ thuộc vào cái hàm pcap_loop, cám ơn mọi người đã góp ý!

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

  1. Cách thoát khỏi vòng lặp khi ấn phím bất kì trong C#?
    Gửi bởi eya_storm trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 19-12-2011, 11:07 AM
  2. Cách thoát chương trình hoàn toàn khi chương trình đang chạy có chứa thread
    Gửi bởi mouseover trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 24-08-2011, 01:17 PM
  3. nhập số 1 hoài thì nó ko thoát khỏi vòng lặp
    Gửi bởi sieuthi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-02-2011, 10:37 AM
  4. làm sao thoát đc 2 vòng lặp ?
    Gửi bởi dtphong1603 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 31-12-2010, 10:53 AM
  5. không thoát được khỏi vòng lặp while
    Gửi bởi Etramus trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 22-10-2008, 05: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