Fermer2
ZephLe 11/05/2009 à 16:44
[nosmile]Quelqu'un aurait une idée de la raison qui explique pourquoi le petit bout de code ci-dessous plante ? Après avoir parcouru MSDN je n'ai pas l'impression de faire des trucs illégaux avec CreateThread & co, pourtant j'ai des plantages (comme ça) à peu près une fois sur 10. Si j'ajoute un "Sleep (10);" entre les appels à ResumeThread, plus rien ne plante. Il y a une limitation quelque part ?
Source
#include <iostream>
#include <map>
#include <windows.h>

struct	MyException
{
};

static DWORD WINAPI	MyCallback (LPVOID)
{
	try
	{
		throw MyException ();
	}
	catch (MyException& e)
	{
	}

	return 0;
}

int	main()
{
	const int		count = 100;
	std::map<int, HANDLE>	threads;
	DWORD			id;

	std::cout << "CREATE THREADS" << std::endl;

	for (int i = 0; i < count; ++i)
		threads[i] = CreateThread (NULL, 0, &MyCallback, 0, CREATE_SUSPENDED, &id);

	std::cout << "START THREADS" << std::endl;

	for (int i = 0; i < count; ++i)
		ResumeThread (threads[i]);

	Sleep (1000);

	return 0;
}