Problema de Ejecuciones Thread Paralelas !!!

1 view
Skip to first unread message

esbxp

unread,
Aug 19, 2009, 11:01:34 AM8/19/09
to lua...@googlegroups.com
Hola:
 
Vean este código,,, que no me resulto,,, esta en Vc60 como Win32-Console. Bien, si alguien conoce C++  CreateThread deja un WndProc,, dandose vuelta hasta que finaliza la ejecución,,, y asi con otro y otro mas.  Bien aquí les dejo el pseudo C++ con Lua, a ver si me entienden.
1). Dos variables Globales 
"bDisplay"  controlando  "Script_a.lua"
"bAtaques" controlando  "Script_b.lua"

2). Se comparte con el programa host
3). El programa host cambia estas variables,, y detiene los theread...
//--------------------------------------------------------------------------------------------
lua_State  *LVM = NULL;
lua_State  *LA  = NULL;      //. thread A
lua_State  *LB  = NULL;     //. thread B
bool bDisplay = false;
bool bAtaques = false;
char buffer[80]="";

 
int my_function1(lua_State *L)
{
 int n = lua_gettop(L);
 int k = (int) luaL_checknumber(L, n);
 
 sprintf(buffer, "Thread-1 %i", k);  LogWrite(buffer);  //. No hace mas que imprimir para saber que paso por aca.
 
 if(k == 5000){
     bDisplay = true
     lua_pushboolean(L, (int) bDisplay);
 }
 return 0;
}
 
int my_function2(lua_State *L)
{
 int n = lua_gettop(L);
 int k =(int) luaL_checknumber(L, n);
 
 sprintf(buffer, "Thread-2 : %i", k);  // LogWrite(buffer); //. No hace mas que imprimir para saber que paso por aca.
 
 if(k == 6000){
     bAtaques = true;
    lua_pushboolean(L, (int) bAtaques);
 }
 return 0;
}
 
int main(int argc, char *argv[])
{
  // LogOpen(".\\LuaDebug.log");
 
    LVM = lua_open();
    luaopen_base(LVM);
    luaopen_table(LVM);
    luaopen_io(LVM);
    luaopen_string(LVM);
    luaopen_math(LVM);
    luaopen_debug(LVM);
 
    lua_register(LVM, "my_function1", my_function1);
   lua_register(LVM, "my_function2", my_function2);

 *LA = lua_newthread(L);
     // Cargar la Variable bDisplay
     // Dejar en Thread la Funcion "Display()" de "script_a.lua"
     // lua_pushclosure(LA, "Display", 2);
     // lua_pcall(LA, 0, 1);
     // lua_dofile(LA,".\\script_a.lua");
 
 *LB = lua_newthread(L)
  // Carga la Variable bAtaques
  // Deja en Thread la Función "Ataques()" del "script_b.lua"
  // lua_dofile(LVM,".\\script_b.lua");

    lua_resume(LA, 0);      
    lua_resume(LB, 0);
 
   do {
        if(bDisplay == true){   //. Detiene el thread LA  
           lua_yield(LA, 1);
        }
        if(bAtaques == true){   //. Detiene el Thread LB
            lua_yield(LB, 1);
        }
    } while (!bDisplay && !bAttack)    //. Se queda esperando que los script paralelos terminen ...

 lua_closethread(L, LA);
 lua_closethread(L, LB);

 lua_close(LVM);
// LogClose();
 
 return 0;
}
 
"Script_a.lua"
-- Esta variable bDisplay viene de C ---
Function Display()
   local ndx = 0
   repeat
     ndx = ndx + 1
     print("Script_a: ", ndx)
     my_function1( ndx )
     -- Leer la Variable bDisplay  de C--
 
   until (bDisplay == true)
End
print("Script_a: Detenido")
 
 
"Script_b.lua"
-- Esta variable bAtaques viene de C ---
function Ataques()
  local ndx = 0
  repeat
      ndx = ndx + 5
      print("Script_a: ", ndx)
      my_function2(ndx)
  
      -- Leer la Variable bAtakes  de C --

  until bAtaques == true
end
print("Script_b: Detenido")
 
Notas: Deje un comentario para que lo rellenen,, con las instrucciones que faltan tanto en C++ como en los script...
Creo que con este ejemplo me quedaría bien claro como funcionan los thread... simpre y cuando en realidad no sea
una simulación de ejecucíón lineal... por eso quiero saber,,, cuales son las instrucciones que se aplicarían en este código,
haganlo funcionar y me cuentan....

Vale gracias !!!
Bye !!!

 
Reply all
Reply to author
Forward
0 new messages