Icone de chargement lors de la connexion a la base

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Icone de chargement lors de la connexion a la base

Message par simonj » 03 Fév 2017 16:08

Soit j'ai pas bien compris son problème, soit je crois que vous vous acharnez un peu pour rien...

Si tu fais sql.open() et que ce n'est pas asynchrone, ça veux dire que ça bloque le fil d’exécution principal tant que ce n'est pas ouvert. Autrement dit tu fais :

Debut de l'image 0
> Changement de l'image du bouton pour mettre le loading
> Ouverture de la base de donnée
>>>>>> Attente de l'ouverture, donc ça freeze l'écran
> Changement de l'image du bouton pour le remettre normal
Fin de l'image 0
Rendu de l'image 0 sur l'écran

Donc tout ce que tu décris est juste normal. Si tu veux voir le changement d'image, il faut attendre au moins une frame (Mais tu auras l'impression juste que ça clignote parce que ça reste qu'une seule frame) avec une Co-Routine pour que l'image soit rendu à l'écran... Je te conseillerais même de faire une Co-Routine qui attends au moins 0.5s pour que ça soit plus naturel.

Mais il resteras toujours le problème que sql.open() est synchrone et donc que l'ouverture se fait sur une seule frame et donc freeze l'écran.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Icone de chargement lors de la connexion a la base

Message par boubouk50 » 03 Fév 2017 16:25

simonj a écrit :Soit j'ai pas bien compris son problème, soit je crois que vous vous acharnez un peu pour rien...
Ça a dérivé sur la logique plus que sur son problème...

Oui, la question du synchrone/asynchrone est là, effectivement.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Camcam
Messages : 41
Inscription : 08 Déc 2016 16:33

Re: Icone de chargement lors de la connexion a la base

Message par Camcam » 03 Fév 2017 23:27

Donc pour conclure soit j arrive à utiliser la dernière version de la DLL et je fais un open asynchrone sois je laisse freezer et tant pis si ça fait moche ^^

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Icone de chargement lors de la connexion a la base

Message par boubouk50 » 06 Fév 2017 10:22

J'ai ce souci depuis belle lurette sur mes applis. Pour l'instant, je mets un panel teinté avec marqué en gros LOADING dessus. C'est statique mais ça explique.
Je ne me suis pas penché du côté du threading, pour empêcher les blocages, peut-être est-ce une solution.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: Icone de chargement lors de la connexion a la base

Message par E3DStef » 06 Fév 2017 20:46

Et une autre solution de pré charger les infos avant d'en avoir besoin (en tâche de fond) ???

Juste réflexion théorique, jamais testé perso...

A+
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Icone de chargement lors de la connexion a la base

Message par simonj » 06 Fév 2017 21:28

Tu peux essayer de faire ça avec un Thread comme ça :

Code : Tout sélectionner


private class Worker
{
	public bool isFinished = false;
	// Il faut lui mettre le bon type de variable
	private SQL _sql = null;
	
	// Il faut lui mettre le bon type de variable
	public Worker(SQL a_sql)
	{
		isFinished  = false;
		_sql = a_sql;
	}
	
	public void OpenSQL()
	{
		_sql.open();
		isFinished = true;
	}
}
	
private IEnumerator OpenSQLAsync() 
{
	// Loading screen à activer
	_UILoadingScreen.Setactive(true);
	yield return new WaitForEndOfFrame();
	
	// Il faut lui passer ta variable SQL qui te permet de faire "_sql.open();"
	Worker process = new Worker(MySqlDataBase);
	Thread thread = new Thread(process.OpenSQL);
	thread.Start();
	
	Debug.Log("Process is starting!");

	while (!process.isFinished)
	{
		Debug.Log("Process is running !");
		yield return new WaitForEndOfFrame();
	}
	
	Debug.Log("Process is finished!");
	// Loading screen à désactiver
	_UILoadingScreen.Setactive(false);
}
J'utilise une classe Worker pour ouvrir la database car ça te permet de passer des choses en paramètre à un Thread (Ce qui normalement n'est pas possible). Comme par exemple ta variable SQL qui va lui permettre d'ouvrir ta base.

Répondre

Revenir vers « Unity le logiciel »