Crear proceso en C con Codeblocks que no muera al matar al proceso padre

Iniciado por DrKillador, 2 Julio 2013, 20:20 PM

0 Miembros y 1 Visitante están viendo este tema.

DrKillador

Hola foreros!

Estoy practicando la creacion de hebras y procesos en C, con Codeblocks en Windows. De momento he hecho una aplicacion que abre la calculadora desde una hebra. Funciona perfecta.


//exec es una funcion que ejecutará el programa pasado como argumento, en las pruebas estoy utilizando calc.exe
DWORD WINAPI b(LPVOID lpParam)
{
    exec(lpParam);
    return 0;
}

void a(char *lpParam)
{
    int dth1;
    HANDLE hth1;

    hth1=CreateThread(NULL, 0, b(lpParam), &dth1, 0, NULL);
    if(hth1==NULL)
        ExitProcess(dth1);
}


Mi duda ahora es la siguiente, cuando cierro la aplicacion se me cierra tambien la calculadora. Entiendo que es el comportamiento correcto, porque una hebra no deja de ser un hilo que depende del proceso padre. ¿Pero como deberia abrir la calculadora para que cuando muera el padre no muera el hijo? ¿No me valdria con crear una hebra no? ¿Deberia ser un proceso con CreateProcess?

Graxxxxx
Python <3 Python

amchacon

Exacto, tendría que ser un proceso nuevo  ;)

Los hilos (hebras) dependen del proceso padre.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

DrKillador

Entiendo la teoría, pero a la hora de implementarlo tengo una duda existencial.

Con CreateThread yo podia pasarle como argumento una función que quería que me ejecutase "en paralelo" (en el caso anterior: b(lpParam)).

Pero con CreateProcess, solo puedo pasarle como argumento un exe, es decir, un programa ¿no?

CreateProcess(0,argument,0,0,TRUE,0,NULL,NULL,&si,&pi);

Graxxx men
Python <3 Python

amchacon

CreateProcess lanza un nuevo programa desde cero, el nombre se indica en el primer campo y los argumentos en el segundo campo.

Los exe pueden recibir argumentos, no sé si has visto una declaración main de este estilo:

int main(int argc,char** argv)

argc es el número de argumentos y argv son los distintos argumentos  ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar


amchacon

Detach no sirve para eso  :silbar:

Cuando finaliza el programa, se cierra igualmente.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

DrKillador

Gracias men, entonces no me queda otra que pasar el código de la funcion que queria ejecutar en un nuevo proceso a un nuevo exe, para poder lanzarlo de manera independiente

saludosss
Python <3 Python