Chapitre V : Les librairies

1. Les fichiers

f = File.new( "calcul.txt" )

begin

  r = File.new( "resultat.txt", "w" )

  while ( f.gets )
    op1,operation,op2 = $_.split( " " )
    res = 0

    case operation
    when "+" : res = op1.to_i + op2.to_i
    when "*" : res = op1.to_i * op2.to_i
    when "-" : res = op1.to_i - op2.to_i    
    when "/" : res = op1.to_i / op2.to_i    
    end
    
    r.puts sprintf( "%s %s %s = %d", op1, operation, op2, res )
  end

  f.close

ensure  
  r.close
end 

2. Threads

Exercice 1
class Horloge

  def demarrer() 
    @compteur = 0
    @dernierTemp = Time.now
    @th = Thread.new() {
      loop {
        tempsPasse = Time.now - @dernierTemp
        # Une seconde de passée
        if ( tempsPasse >= 1 ) then
          @compteur += 1      
          @dernierTemp = Time.now
        end
      }
    }
  end
  
  def arreter()
    @th.exit
    @compteur
  end

end

h = Horloge.new
h.demarrer

# Mise en attente de 3 secondes
sleep( 3 )

# Le résultat doit être >= 3
puts h.arreter 
Exercice 2
require 'thread'

class Processeur
  attr_reader :enTravail

  def travail()
    @enTravail = true
    sleep( 1 )
    @enTravail = false
  end
end

class Calculateur
  
  def initialize()
    @semaphore = Mutex.new

    @processeurs = []
    5.times {
      @processeurs << Processeur.new()
    }

  end

  def calculer() 
    procLibre = nil    
    # Recherche d'un processeur dans une section critique
    @semaphore.synchronize() {  
      while ( procLibre == nil ) 
        @processeurs.each {
            |p|
            if ( !p.enTravail() ) then
              procLibre = p
              break
            end
         }
      end
    }
    procLibre.travail
  end

end

calculateur = Calculateur.new

clients = []

# Création des clients
10.times {
  |i|
  clients <<...
Pour consulter la suite, découvrez le livre suivant :
couv_Ruby.PNG
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Chapitre IV : Programmation objet
Suivant
Chapitre VI : Interface graphique