2010-08-02 13 views
0

Je veux écrire un programme qui calculera constamment des nombres, et dessine sur le canevas de la fenêtre, y compris le texte de dessin et la définition des pixels. Donc, le programme ne peut probablement pas entrer dans une boucle d'événements (le main_loop), car cela arrêtera le calcul des nombres.Comment écrire un programme wxRuby qui va juste dessinerText et setPixel sans entrer dans main_loop?

  1. Existe-t-il un moyen de dessiner les éléments sans boucle d'événement?

  2. Ou, si un thread est créé, de sorte qu'un thread fasse le calcul et qu'un thread gère la boucle d'événement de la fenêtre?

Répondre

0

La stratégie générale des programmes basés sur des événements qui doivent faire de longs calculs est l'un des suivants:

  1. briser les calculs en petits morceaux qui ne prennent pas plus de quelques 10 années de millisecondes, puis planifiez leur exécution l'une après l'autre lorsque la boucle d'événement est inactive. Rappelez-vous: la boucle d'événement est juste une boucle, donc si votre calcul de longue durée est juste une énorme boucle de code serré et rapide laissez la boucle d'événement soit votre boucle.
  2. Mettez le calcul long dans un thread séparé et demandez à ce thread de communiquer ses résultats au thread principal d'une manière sûre pour les threads.
  3. Mettez le calcul long en cours dans un processus distinct et demandez à ce processus d'envoyer des mises à jour à votre processus principal

La première méthode est idéale si vous pouvez la gérer. Ma préférence personnelle va ensuite à la troisième méthode. Les threads IMO devraient être évités dans la mesure du possible, à moins que vous n'instruiez complètement la programmation avec filetage (et même alors, je recommande toujours un processus séparé).