Programa para verificar co-routines ...

5 views
Skip to first unread message

esbxp

unread,
Aug 17, 2009, 9:20:23 PM8/17/09
to lua...@googlegroups.com
Hola:
Si yo again....

Necesito una especie de comprobacion de la ejecución diferida de las co-routines... aver si me explico.
Un programa Lua... como una especie de tombola... con 3 thread

1) Empieza la ejecucion de una  thread...     imprime los valores generados  "thread-1 : 95 "
2) 2 seg despues empieza la 2da thread...   imprime los valores generados   "thread-2 : 46"
3) 4 seg despues empieza la 3ra thread...    imprime los valores generados  "thread-3 : 25"

Pues bien el programa se detiene cuando las 3 thread - tienen el mismo número...
el detalle esta en como consultar el numero que va generando la thread... si detenerla... solo cuando es necesario...

comprenden ... !!!
 
espero el Sample.Lua --- en la 5.0,, gracias !!!
 
Gracias !!!!




 

ATuin

unread,
Aug 18, 2009, 1:34:45 PM8/18/09
to lua-es
Un saludo, no se si te refieres a algo como esto:

Es un programa muy simple que crea 3 coroutinas, cada una de ellas
genera un número al azar, el número está comprendido entre NMIN y NMAX
(puedes modificar esas variables para cambiar el intervalo), cada vez
que se genera el mismo número 3 veces seguidas, las coroutinas mueren
y el program termina.

Has de tener en cuenta que ahora mismo es imprescindible pasarle un
tiempo de espera antes de cada coroutina, ya que de lo contrario la
semilla del generador de azar será la misma y sólo se realizarán 3
iteraciones.

Te copio el programa:

[code]

local NMIN = 1
local NMAX = 3
local f = function (tname, lastn, counter, iterations)
local c = counter
local i = iterations
local ln = lastn
while true do
if c == 3 then return ln, c, i end
math.randomseed(os.time())
local n = math.random(NMIN, NMAX)
if n == ln then
c = c + 1
else
c = 1
end
print(string.format(" %s - %s - %s - %s", tname, n, ln, c))
_, ln, c, i = coroutine.yield(n, c, i)
end
end

local Threads = {
-- Thread Name, Coroutine, Sleep time
{"Thread 1", coroutine.create(f), 0},
{"Thread 2", coroutine.create(f), 1},
{"Thread 3", coroutine.create(f), 1},
}

local bye = false
local c = 1
local n = 0
local iterations = 0
print("Output format:")
print("Thread - Number - LastNumber - Times Matched")
print("--------------------------------------------")
while not bye do
for i, t in ipairs(Threads) do
if t[3] > 0 then
os.execute("sleep " .. tonumber(t[3]))
end
s, n, c, iterations = coroutine.resume(t[2], t[1], n, c,
iterations + 1)
if c == 3 then
bye = true
break
end
end
end
print(string.format("Matched %s y %s iterations", n, iterations))

[end code]

Te muestro también la salida:

.-(/Depot/Users/eof/Code/
Lua)---------------------------------------------------------------------------------------------------------------------------------------
(eof@Turing)-
`--> lua RandomCo.lua
Output format:
Thread - Number - LastNumber - Times Matched
--------------------------------------------
Thread 1 - 1 - 0 - 1
Thread 2 - 2 - 1 - 1
Thread 3 - 3 - 2 - 1
Thread 1 - 3 - 3 - 2
Thread 2 - 1 - 3 - 1
Thread 3 - 2 - 1 - 1
Thread 1 - 2 - 2 - 2
Thread 2 - 1 - 2 - 1
Thread 3 - 3 - 1 - 1
Thread 1 - 3 - 3 - 2
Thread 2 - 3 - 3 - 3
Matched 3 y 11 iterations

No se si es lo que pedias, espero que te sirva, saludos.

Aitor.

esbxp

unread,
Aug 19, 2009, 9:48:00 AM8/19/09
to lua-es
Hola:

Si muy bueno, lo pondre como ejemplo en el tutorial... lo divido en 2
secciones ,,, ejemplos de "Programacion Lua" e "Interface entre C y
Lua",, esta es la fuerte... en fin...

Yo no se si aparecio la Ultima Edicion de la Traducción aca... pues
por siaca pongo
denuevo el Link.-

http://www.mediafire.com/file/hxoidjyizey/Lua50manual.zip

Voy a poner un ejemplo... mas bien para que lo corrijan...
porque no me esta resultando... y en que falla aun no lo se...

Luego lo Edito...

Saludos
Gracias !!!
> Lua)-----------------------------------------------------------------------­----------------------------------------------------------------

ATuin

unread,
Aug 19, 2009, 1:35:05 PM8/19/09
to lua-es


On 19 ago, 10:48, esbxp <esbva2...@gmail.com> wrote:
> Hola:
>
> Si muy bueno, lo pondre como ejemplo en el tutorial... lo divido en 2
> secciones ,,, ejemplos de "Programacion Lua" e "Interface entre C y
> Lua",, esta es la fuerte... en fin...


Hombre, tengo varios bindings de c a lua, que uso aquí, algunos son
más complejos que otros, pero todos cubren lo básico y son
relativamente sencillos, todo el código es GPL así que si quieres algo
para añadir, sólo tienes que pedirlo, te mando el tgz y listo, haz lo
que quieras con el. Algunos proyectos funcionan pero no han sido
completados, con esto me refiero a que me quedan funciones que añadir
y cosillas que depurar, pero como ejemplos creo que valdrán. Te mando
un listado de lo que tengo hecho, por si te interesa algo:

*Lua-Zlib: Un binding sencillito a zlib, con soporte para gzip, en
proyecto añadir soporte para zip

*Lua-Archive: Binding a libarchive, una libreria bajo licencia BSD que
permite manejar ficheros tar, cpio y pax (aún no añadido)

*iaSys: Un conjunto de módulos en lua que estoy creando para portar
GoboLinux completamente a lua, incluye bindings a alguna syscall, pero
casi todo es código lua. Operativo, he arrancado algún sistema
embebido con esta librería, pero muy verde.

*iaDOM: Un módulo que cree para xavante, la idea es crear una API
similar a DOM para crear y manejar páginas xhtml, lo he usado en
alguna aplicación que he creado para orbit y sputnik.

*LSpice: CLI para spice, es un pequeño programa (cada vez menos
pequeño) para crear un interface (de momento en consola) para el
ngspice y gnuplot.

*Un generador de parses, algo similar a yacc (al menos en idea, por
que de momento sólo te crea las tablas del analizador sintáctico,
falta crear hooks para poder generar un parser completo desde el).
Escrito todo en lua y muy sobrecargado con metatablas, por lo que
necesita un alivio en c.

* Tengo alguna cosa más, pero esta muy verde (una librería para
RealTimeBattle, un binding para manejar un display lcd-usb desde lua,
bindings a dbus, a rawsockets, etc ...)

De todas formas, si quieres código, sería interesante que propusieras
un problemilla de esos básicos (8-reinas, salto del caballo, ...) o no
tan básicos en la lista y que la gente entrege códigos, de esta manera
se da vida a la lista, nos divertimos un rato y tu tienes códigos de
ejemplo para añadir :).

No se que te parecerá, si necesitas algo, pídelo.

Saludos
Reply all
Reply to author
Forward
0 new messages