Как закрыть все потоки одновременно в приложение?

Тема в разделе "WASM.WIN32", создана пользователем MuForum, 11 мар 2007.

  1. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Есть программа, когда user к ней подключается, то создается поток TThread.
    Всё работает нормально, вот только надо отключить всех users, то есть завершить все потоки при нажатии одной кнопочки в приложении...

    P.S. -> Пробовал Thread->Terminate() - завершает тока первый поток.

    Если у кого-то, есть какие-то предложения/догадки, просьба написать!

    Заранее благодарю!
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Ну так перебери все потоки в процессе с помощью CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0) и в цикле вызывай TerminateThread. Только не забудь ввести условие, что ID завершаемого потока не должен быть равен ID текущего потока.
     
  3. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Код (Text):
    1. void KillThreads(void)
    2. {
    3.     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    4.     if (hSnap == INVALID_HANDLE_VALUE)
    5.         return;
    6.    
    7.     HANDLE hThread;
    8.     THREADENTRY32 thread = { 0 };
    9.     thread.dwSize = sizeof(THREADENTRY32);
    10.  
    11.     if (Thread32First(hSnap, &thread))
    12.     {
    13.         do {
    14.             if (thread.th32OwnerProcessID == GetCurrentProcessId() && thread.th32ThreadID != GetCurrentThreadId())
    15.             {
    16.                 hThread = OpenThread(THREAD_TERMINATE, 0, thread.th32ThreadID);            
    17.                 TerminateThread(hThread, 0);               
    18.                 CloseHandle(hThread);
    19.             }
    20.         } while (Thread32Next(hSnap, &thread));
    21.     }
    22.  
    23.     CloseHandle(hSnap);
    24. }
     
  4. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    #3, Cr4sh - Спасибо за помощь!

    Но на сколько понимаем, так эта функция будет убивать и слушающий поток!?

    P.S. -> Будем уже работать, ещё раз спасибо за помощь!
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Код (Text):
    1.  ... thread.th32ThreadID != GetCurrentThreadId() ...
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Да, будет. Если программа твоя, тогда или храни хендлы новых тредов в отдельном массиве, или храни хэндл слушающего треда отдельно, шоб можно было сравнить и не закрыть лишнего