Есть программа, когда user к ней подключается, то создается поток TThread. Всё работает нормально, вот только надо отключить всех users, то есть завершить все потоки при нажатии одной кнопочки в приложении... P.S. -> Пробовал Thread->Terminate() - завершает тока первый поток. Если у кого-то, есть какие-то предложения/догадки, просьба написать! Заранее благодарю!
Ну так перебери все потоки в процессе с помощью CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0) и в цикле вызывай TerminateThread. Только не забудь ввести условие, что ID завершаемого потока не должен быть равен ID текущего потока.
Код (Text): void KillThreads(void) { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (hSnap == INVALID_HANDLE_VALUE) return; HANDLE hThread; THREADENTRY32 thread = { 0 }; thread.dwSize = sizeof(THREADENTRY32); if (Thread32First(hSnap, &thread)) { do { if (thread.th32OwnerProcessID == GetCurrentProcessId() && thread.th32ThreadID != GetCurrentThreadId()) { hThread = OpenThread(THREAD_TERMINATE, 0, thread.th32ThreadID); TerminateThread(hThread, 0); CloseHandle(hThread); } } while (Thread32Next(hSnap, &thread)); } CloseHandle(hSnap); }
#3, Cr4sh - Спасибо за помощь! Но на сколько понимаем, так эта функция будет убивать и слушающий поток!? P.S. -> Будем уже работать, ещё раз спасибо за помощь!
Да, будет. Если программа твоя, тогда или храни хендлы новых тредов в отдельном массиве, или храни хэндл слушающего треда отдельно, шоб можно было сравнить и не закрыть лишнего