Bonjour,

C'est ma première journée sur le TThreads

Je galère un peu, alors voici mes questions

Je créé un thread de calcul "non suspendu" sur l'appui d'un bouton

Dans le Execute()
je "prépare" 3 autres threads suspendus eux par contre pour une série d'opérations sur des grands entiers (la multiplication récursive de Karatsuba)

voici une portion de ce Execute()

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
bool __fastcall TLLTestsThread::TestExponentMersenne(jpNexp exponent_p)
{
...
kthr[VPS] = new TKaratsubaThread(kthrs_digits[VPS], g1,		  	a, 	b, L"_VPS");
kthr[VG]  = new TKaratsubaThread(kthrs_digits[VG],  g_sn_digits, 	c, 	d, L"_VG");
kthr[VD]  = new TKaratsubaThread(kthrs_digits[VD],  g_sn_digits + g, 	e,    	f, L"_VD");
...
for (it=1; it<(exponent_p-2); it++)
{
 thr_square_karatsuba(g_sn2_digits, g_sn_digits, g_sn2_digits_nb, g_sn_digits_nb, kthr);
 
 jpn2_sub(g_sn2m2_digits, g_sn2_digits, g_2.digits, g_sn2m2_digits_nb, g_sn2_digits_nb, 1);
 
 jpn2_div_for_ll(g_sn_digits, g_sn_d2n_digits, g_sn_m2n_digits, g_sn2m2_digits, g_mersenne_digits, g_mersenne_digits_nb, exponent_p);
}

dans ma fonction thr_square_karatsuba()

j'appelle mes 3 threads avec Start()

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
	kthr[VG]->Start();
	kthr[VG]->WaitFor();
 
	kthr[VD]->Start();
	kthr[VD]->WaitFor();
 
	kthr[VPS]->Start();
	kthr[VPS]->WaitFor()

Le soucis c'est que lors de la 1er iteration (it=1), les threads sont bien lancés
puisque qu'ils démarrent a partir d'un mode (Suspended=true, Finished=false)

lors du deuxième tour de boucle (it=2)
les 3 threads sont apparemment dans un mode (Suspended=false, Finished=true)
qui ne permet pas les 3 nouveaux appels de Start(), le 1er plante !

et cela me produit une exception EThread

Nom : Presse-papier02.jpg
Affichages : 188
Taille : 40,7 Ko

Pourquoi ?
les threads ne sont pas suspendus !?

Merci pour votre aide

PS:
- je précise que j'ai géré les Terminated, même si je ne le mentionne pas
- l'ordre
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
Thread1->Start(),Thread1-> WaitFor(), Thread2->Start(),Thread2-> WaitFor(), Thread3->Start(),Thread3-> WaitFor()
a été mis en place pour un débogage plus aisé, ensuite je ferais tout mes Start() à la suite puis tout mes WaitFor()