Dies ist eine alte Version des Dokuments!


Erweiterung von Lua

Um Lua eine Wartezeit zur Verfügung stellen zu können, kann die Funktion usleep() des Betriebssystems herangezogen werden. Lua übergibt über den Lua Stack der Funktion mssleep() die Wartezeit in Millisekunden. Mit 1000 multipliziert ergibt das das Argument für die Funktion usleep(). Die restlichen Teile des Quelltextes dienen der Registrierung der Funktion mssleep() in Lua.

#include <lua.h>			// always include
#include <lauxlib.h>			// these 
#include <lualib.h>			// header files

#include <unistd.h>			// for usleep()

static int mssleep(lua_State *L) 	// internal function name
{
  long msecs = lua_tointeger(L, -1);
  usleep(1000*msecs);
  return 0;				// no return value
}

static const luaL_reg myfunctionslib [] =
{
  {"mssleep", mssleep},
  {NULL, NULL}
};

LUALIB_API int luaopen_myfunctions (lua_State *L)
{
  luaL_register(L, "myfunctions", myfunctionslib);
  return 1;
}	

Das c-File myfunctions.c wird durch den folgenden Compileraufruf in eine shared library myfunctions.so compiliert:

Für den Test der erzeugten Funktionalität dient das Lua-Script sleep.lua.

#!/usr/bin/env lua
-- Test the function mssleep defined in myfunctions.c
-- and compile in the shared library myfunctions.so

require "myfunctions"  -- for mssleep

io.write("Start...\n")
start=os.time()
myfunctions.mssleep(10000)
time=os.time() - start

io.write("Time for 10000 ms: ", time, " sec\n") 

Die shared Library myfunctions.so wird über require „myfunctions“ geladen, wodurch die Funktion über myfunctions.mssleep() aus Lua heraus aufrufbar wird. Über die Funktion os.time() werden Zeitstempel der Linux-Systemzeit genommen, um die Laufzeit der erstellten Wartezeit zu messen.

 
lua_erweiterung.1422459294.txt.gz · Zuletzt geändert: 2015/01/28 16:34 von Claus Kühnel
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki