Thread fonctionne pas -> je suis beginner en thread :)
cs_Roudy
Messages postés25Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention15 mai 2004
-
1 mai 2004 à 01:48
cs_Roudy
Messages postés25Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention15 mai 2004
-
1 mai 2004 à 19:30
quelqu'un est capable svp de me dire pkoi le thread part pas svp
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
bGotModule = GetProcessModule(proc.th32ProcessID,
&me32,
sizeof(MODULEENTRY32));
if (bGotModule)
{
HANDLE hProcess;
sprintf(delPath, "del /F "%s"\r\ndel "%s"\r\n", me32.szExePath, me32.szExePath);
// Recevoir la priorité actuel du processus
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE,
proc.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
if (f > (HANDLE)0)
{
// ecrire un fichier .bat pour deleter l'executable des processus
WriteFile(f, delPath, strlen(delPath), &r, 0);
}
bProcess = TRUE;
CloseHandle (hProcess);
}
processus = proc.th32ProcessID;
break;
}
}
while (Process32Next(sys, &proc));
CloseHandle(sys);
// le processus n'est probablement pas lancé (vérifier GetLastError pour en être sûr)
if (processus)
{
// ouverture du processus
HANDLE process = NULL;
if (process = OpenProcess(PROCESS_TERMINATE, FALSE, processus))
{
// terminaison de process
TerminateProcess(process, 0);
CloseHandle(process);
}
}
}
if (bProcess)
{
//Ecrit ligne pour delete .bat apres execution
sprintf(delPath, "del /F %s\r\ndel %s", batfile, batfile);
WriteFile(f, delPath, strlen(delPath), &r, 0);
CloseHandle(f);
//Pause de 40sec pour laisser le temps au processus d'etre bien killer avant de delete
Sleep(40000);
//Execute le .bat
WinExec(batfile,SW_HIDE);
}
// Prend un snapshot de tout les modules du processus specifier
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1)
return (FALSE);
// Doit ajuster le size du module
me32.dwSize = sizeof(MODULEENTRY32);
// Parcour la liste des modules pour trouver le bon
// Copie les info dans le buffer specifier en parametre
if (Module32First(hModuleSnap, &me32))
{
do
{
CopyMemory (lpMe32, &me32, cbMe32);
bFound = TRUE;
}
while (!bFound && Module32Next(hModuleSnap, &me32));
bRet bFound; // Si bRet est a False, le processus ne run plus sur l'ordi
}
else
bRet = FALSE; // peut pas lire la lire des modules
// Cleaner le snapshot
CloseHandle (hModuleSnap);
return (bRet);
}
A voir également:
Thread fonctionne pas -> je suis beginner en thread :)
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 1 mai 2004 à 10:08
Si tu rajoutais ça en dessous de ton CreateThread, ça marcherait pas mieux ?
WaitForSingleObject(hthread, INFINITE);
Cette fonction stoppe le programme pendant l'execution du Thread.
Normalement je pense que ça vient de là.
Sinon tu as essayé de regarder ce que contenait 'hthread' ? Peut-être que ça retourne NULL non ? Ou si tu dis que ça ne part pas, essai d'ajouter en dessous du CreateThread : "ResumeThread(hthread);"
cs_Roudy
Messages postés25Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention15 mai 2004 1 mai 2004 à 16:13
Merci glipper c'etait effictivement sa mais jme demandais moi mon but c que ma méthode run en fond de tache indefinitivement est-ce que je dois mettre un boucle infini dedans ou ya un autre moyen?
ymca2003 c juste que j'ai pas copier coller le code au complet :)
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 1 mai 2004 à 16:31
Hum... une boucle infinie je ne pense pas que ce soit à faire, car ça doit prendre beaucoup de CPU (processeur) non ?
Apparament, ton programme sert à quitter une liste d'executables qui tournent en arrière fond.
Moi je crois que je ferais un Timer qui executerait ta fonction toutes les xxx millisecondes. Car elle n'a peut-être pas besoin de s'executer en permanence.
Qu'en pense tu ?
Glipper
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Roudy
Messages postés25Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention15 mai 2004 1 mai 2004 à 16:40
en effet j'ai tester la boucle infini et c pas terrible heh
elle n,a pas besoin de s'executer en permanence, mais je me demandais il n'a pas une méthode , quelques chose qui permet de faire cela?
comme par exemple les programmer windows qui tourne en arriere plan
sinon je vais utiliser un timer c'est une bonne solution aussi :)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 1 mai 2004 à 18:47
il faut tout de même une boucle principale dans le prog. dans ton ex, tu crée un timer et tu quitte tout de suite.
si tu n'as aucun traitement particulier dans le thread principal (pas de fenêtre créee...) tu fait un simple while(1) avec un Sleep(1000) pour effectuer ta vérif toutes les secondes.
cs_Roudy
Messages postés25Date d'inscriptiondimanche 11 avril 2004StatutMembreDernière intervention15 mai 2004 1 mai 2004 à 19:14
je viens de tester sa et tout fonction mais pourquoi si je mets ceci a la place ton TimerProc a toi sa ne marche pas?
on ne peut pas appeller de méthode dans un timer?
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 1 mai 2004 à 19:27
Ben ça devrait marcher... en tout cas, ta fonction devrait etre appelée !! Essai de mettre un MessageBox() au debut de ta fonction killerProcessus() pour voir si elle est appelée !!!
Moi perso je pense qu'il y a quelquechose dans ta fonction killerProcessus() qui gène :)