Bonjour,

Je lance une méthode C a partir de Java en utilisant JNI.
Cette méthode Java nommée Draw() est appelée PLUSIEURS fois pour peindre différentes parties d'un composant et donc au final peindre l'integralité du composant.

Je dois threader tout cela. Je voudrais faire les threads en C dans JNI.
Java lance la métdode Draw()->JNI->C qui lance un thread. Puis retour à Java en on remet ca...

Bref mon problème est que Java passe un argument à la méthode native. Or cet argument pointe toujours a la meme adresse mémoire. J e dois donc copier cet argument (jobject) pour le passer à mon thread mais comment faire pour cloner un jobject???

Code : 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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
typedef struct tag_threadData {
 
	jobject tile;
....
 
} threadData;
 
JNIEXPORT void JNICALL Java_com_cciti_viewer_gui_swt_view_Painter_drawTile(JNIEnv *env, jobject obj, jint hdc, jobject tile) {
 
threadData *p_threadData = NULL;
	p_threadData = malloc(sizeof(threadData));
 
p_threadData->tile=tile; ????? comment copier tile car on connait pas sa taille en octet donc difficiele de faire un memecpy
 
	pthread_t thread;
 
	pthread_mutex_lock(&mutex);
	printf("CREATION THREAD\n");
 
	int rc = pthread_create(&thread, NULL, thread_draw, (void *)p_threadData);
 
	if(rc) {
		fprintf(stderr, "Erreur lors de la création du thread - le code de retour de pthread_create() est %d -\n", rc);
		exit(EXIT_FAILURE);
	}
}
 
void *thread_draw(void *p_param) {.......}
Merci