Другие языки программирования и технологии

Программирование на С

Напишите программу на C, которая создает случайное число дочерних процессов. Каждый дочерний процесс создает другое случайное число процессов, которые будут спать в течение произвольного количества секунд (от 1 до 10), а затем умирают. Имейте ввиду, что каждый соответствующий родитель умрет только тогда, когда все дети умрут.
#include
#include
#include
#include

/* This function acts as the 'main' function for each new thread.
static void threadMain(void *arg) */
{
printf("Thread %2d has an ID of %u\n", (int)arg, GetCurrentThreadId());

_endthread();
}

int main(void)
{
#define NTHREADS 25

HANDLE hThreads[NTHREADS];
int i;

// Create NTHREADS inheritable threads that are initially
// suspended and that will run starting at threadMain().
// at threadMain().
for (i = 0; i < NTHREADS; i++)
{
SECURITY_ATTRIBUTES sa =
{
sizeof(SECURITY_ATTRIBUTES), // structure size
0, // No security descriptor
TRUE, // Thread handle is inheritable

};

DWORD threadId;

hThreads[i] = (HANDLE)_beginthreadNT(
threadMain, // Thread starting address
4096, // Thread stack size
(void *)i, // Thread start argument
&sa, // Thread security
CREATE_SUSPENDED, // Create in suspended state

&threadId); // Thread ID.

if (hThreads[i] == INVALID_HANDLE_VALUE)
{
MessageBox(0, "Thread Creation Failed", "Error", MB_OK);
return 1;
}

printf("Created thread %2d with an ID of %u\n", i, threadId);
}

printf("\nPress a key to thaw all threads\n\n");
getch();

// Resume the suspended threads.
for (i = 0; i < NTHREADS; i++)
ResumeThread(hThreads[i]);

// Wait for all threads to finish execution.
WaitForMultipleObjects(NTHREADS, // Number of objects to wait for
hThreads, // The objects to wait for
TRUE, // Wait for all objects
INFINITE); // No timeout

// Close all of the thread handles.
for (i = 0; i < NTHREADS; i++)
CloseHandle(hThreads[i]);

return 0;
}
Антон Труфанов
Антон Труфанов
176
Лучший ответ
Григорий Тюнин Бедные-бедные программисты под Windows, сколько всего ненужного нужно написать для такой простой задачи. К счастью, в нормальных ОС есть функция fork()

И да, возможно я чего-то подзабыл, но, как мне кажется, для создания процесса используется функция из семейства CreateProcess, а в вашем коде создаются потоки, что не соответствует условию задачи.