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
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
a �t� mis en place pour un d�bogage plus ais�, ensuite je ferais tout mes Start() � la suite puis tout mes WaitFor()
Code cpp : S�lectionner tout - Visualiser dans une fen�tre � part Thread1->Start(),Thread1-> WaitFor(), Thread2->Start(),Thread2-> WaitFor(), Thread3->Start(),Thread3-> WaitFor()
Partager