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 !!!