realbasic-nug.fr
[Top] [All Lists]

Re: Lancement de threads dans une boucle...

To: REALbasic NUG French <realbasic-nug dot fr at lists dot realsoftware dot com>
Subject: Re: Lancement de threads dans une boucle...
From: Powel <compute at e-topics dot net>
Date: Tue, 20 Nov 2007 17:45:23 +0100
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot fr at lists dot realsoftware dot com
References: <4EE943A2-0AB7-49CD-8CF9-30488C44887D at e-topics dot net> <AB948EBD-BED9-4618-A0A4-51352B5344B8 at mac dot com> <EDDF0BFF-9FCC-4133-9969-8700436A5289 at e-topics dot net> <F387D873-3151-49C9-96FD-0C0C3E2038C6 at mac dot com>
Merci pour vos contributions. Elles sont précieuses pour l'avancement de la bonne stabilité de mon application.

Par ailleurs, je me demandais si les HTTPSocket sont considérés comme des threads. Plus précisément, si on lance une dizaine de Socket avec yield=true et que l'on souhaite accédé aux propriétés d'une fenêtre, il serait prudent d'utiliser un semaphore avec signal et release. Est- ce que cela a un sens dans un HTTPSocket ?

Powel




Le 20 nov. 07 à 13:18, Arnaud Nicolet a écrit :

Le 20 nov. 07 à 10:38 matin, Powel a écrit:

Je souhaiterais que les threads disposent bien d'une référence précise.

Alors utilisez un tableau (array).

En revanche, à moins de ne pas avoir compris le fonctionnement des Threads dans RB, je ne peux pas utiliser le même puisque les Threads en question ont une exécution de 1à 10 secondes. Ils n'auraient donc pas le temps de s'exécuter complètement et cela serait contraire à l'intérêt des threads non ? La classe de référence de mon thread télécharge une page et chaque thread de la boucle télécharge une page différente.

Ce que je ferais, c'est d'avoir un seul "thread". Ensuite, ce thread aurait une propriété (par exemple: "PagesToDownload() As String"). Ensuite, dans l'événement "Run", on aurait quelque chose du genre:

dim s As String

do
if UBound(PagesToDownload)=-1 then Exit 'Plus de pages à télécharger

s=PagesToDownload(0)
//Télécharger la page
PagesToDownload.Remove 0
loop

De plus, il faut que le Thread s'exécute quand il y a de nouvelles pages à télécharger (ce peut être soit quand le Thread fonctionne (dans ce cas, pas de problème, la boucle téléchargera plus tard) ou quand le Thread a terminé (ou n'a pas encore commencé)).

J'ajouterais donc une méthode dans le Thread:

Sub AddPageToDownload(Page As String)
PagesToDownload.Append Page
if me.State<>0 then 'Le thread ne marche pas (éventuellement remplacer par "=4" si vous voulez lancer le Thread que lorsqu'il n'est pas suspendu ou en cours)
Run
end if
End Sub

Pour ajouter une page à télécharger, il suffit de garder une référence au Thread (une propriété de la fenêtre, par exemple) et d'utiliser ce code:

MyThread.AddPageToDownload "http://www.realbasic.com";

Hope this help (j'espère que ça aide).



<Prev in Thread] Current Thread [Next in Thread>