thread suma que pthread procesos pid_t hilos funcion ejercicios con c++ dll mfc system

c++ - suma - ¿Puedo suspender un proceso excepto un hilo?



pthread c (2)

Voy a suspender (o detener) un proceso excepto un hilo.

Intenté usar SuspendThread (Función Api) y el resultado es que el hilo del proceso se convirtió en estado no responsable.

Esto no es lo que yo quería. Quiero hacer que se reanude un hilo que debo hacer un trabajo importante.

¿Como puedo resolver esto? Por favor, da tu idea.

Gracias.


por lo que yo sé, no puedes suspender un proceso excepto un hilo ... porque cuando el proceso sale de todos los hilos también obtendrá la salida. si lo desea en lugar de un hilo, puede engendrar un proceso secundario y usarlo.


Puede llamar a CreateToolhelp32Snapshot para obtener una lista de hilos que pertenecen a un proceso. Una vez que tenga esa lista simplemente itere y suspenda cada hilo que no concuerde con el ID del hilo actual. El siguiente ejemplo no está probado, pero debería funcionar bien.

#include <windows.h> #include <tlhelp32.h> // Pass 0 as the targetProcessId to suspend threads in the current process void DoSuspendThread(DWORD targetProcessId, DWORD targetThreadId) { HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (h != INVALID_HANDLE_VALUE) { THREADENTRY32 te; te.dwSize = sizeof(te); if (Thread32First(h, &te)) { do { if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(te.th32OwnerProcessID)) { // Suspend all threads EXCEPT the one we want to keep running if(te.th32ThreadID != targetThreadId && te.th32OwnerProcessID == targetProcessId) { HANDLE thread = ::OpenThread(THREAD_ALL_ACCESS, FALSE, te.th32ThreadID); if(thread != NULL) { SuspendThread(thread); CloseHandle(thread); } } } te.dwSize = sizeof(te); } while (Thread32Next(h, &te)); } CloseHandle(h); } }