Dominik Posted March 1, 2018 Report Share Posted March 1, 2018 Hello,in fsuipc I have assigned LUA script buttons. The buttons have the "Control to repeat while held" option selected. When using these buttons, the FPS drops from 30 to ~ 7 !!! which is very tedious. This happened after installing the latest version of FSUIPC 4.974. On version 4.858 LUA worked correctly. I use FSX and B737 PMDG I am asking for help because it is impossible to fly :(Sample LUA file:ipc.control (70481,2147483647)ipc.sleep (400) Regards, Dominik Link to comment Share on other sites More sharing options...
Thomas Richter Posted March 1, 2018 Report Share Posted March 1, 2018 Hi, Quote in fsuipc I have assigned LUA script buttons. do you mean to run those Lua scripts? If so, I think what happens is that you start that Lua script and before it stops because of the ipc.sleep you already start a new one. Each Lua file runs on its own thread and that takes resources. Did you check if the FSX load on the processor extreme increases that might prove that? Pete might correct me here if I'm wrong. Thomas Link to comment Share on other sites More sharing options...
Pete Dowson Posted March 1, 2018 Report Share Posted March 1, 2018 2 hours ago, Dominik said: The buttons have the "Control to repeat while held" option selected. When using these buttons, the FPS drops from 30 to ~ 7 !!! which is very tedious. As well as what Thomas says, this is quite possible with a Lua being constantly loaded and deleted. Each Lua is another thread, running in a processor, and creating and deleting threads takes time. Instead of this: 3 hours ago, Dominik said: ipc.control (70481,2147483647)ipc.sleep (400) use an Event to detect a Lua Flag being set (assign to Lua flag, and toggle it), then put yourr ipc.control call in a function and call it withe an event.flag. Get the Lua plug-in preloaded by using an [Auto] section in the INI file. Of course, your true application must be more complicated than just the one ipc.control, because for that you'd just assign directly. Incidentally, I don't see the point of the ipc.sleep(400). Your repeat is happening (by default) at 20 per second (50 mSecs), so all out of them are simply terminating and restarting the thread, as Thomas said. Why have repeat if you want to slow it down to only 5 actions every 2 seconds (which would work in any case)? You might as well simply press your button or key several times. 3 hours ago, Dominik said: This happened after installing the latest version of FSUIPC 4.974. On version 4.858 LUA worked correctly. I use FSX and B737 PMDG Sorry, too much has changed in the 6 years (!!!) since 4.858 that I cannot comment on that. I expect thinmgs have been made to work properly or better, but perhaps just not as you expected. Check the History document to see for yourself. Pete Link to comment Share on other sites More sharing options...
Dominik Posted March 2, 2018 Author Report Share Posted March 2, 2018 7 hours ago, Pete Dowson said: Incidentally, I don't see the point of the ipc.sleep(400). I use push buttons to switch radio frequency and autopilot settings (altitude, HDG IAS, etc.) Without sleep function, this data changes too quickly and it is difficult to hit the right value. Slowing down in LUA with the Sleep function it worked great. 8 hours ago, Thomas Richter said: Did you check if the FSX load on the processor extreme increases that might prove that? Pete might correct me here if I'm wrong. Yes, I checked the processor load, the CPU load did not increase. I understand that FSUIPC is working properly and that LUA script FPS will be smaller due to looping Regards. Dominik Link to comment Share on other sites More sharing options...
Pete Dowson Posted March 2, 2018 Report Share Posted March 2, 2018 2 hours ago, Dominik said: I use push buttons to switch radio frequency and autopilot settings (altitude, HDG IAS, etc.) Without sleep function, this data changes too quickly and it is difficult to hit the right value. Slowing down in LUA with the Sleep function it worked great. But each time the button repeat occurs, within a certain allowed time (66 mSecs by default) the Lua thread is forcibly terminated if it hasn't done so by itself, and re-loaded, recompiled and restarted. The time allowed for it to terminate by itself is set by LuaRerunDelay=66 in the [General] section of the INI file. So, your button is repeating at 20 times per second (default joystick scan rate -- same as keyboards) and so the Lua is being terminated and restarted well before the 400 mSecs is elapsed. On average you'll succeed in slowing down the repeat rate by the 16 mSecs plus the time to terminate, reload, recompile and restart, but it won't be by 400 mSecs. You'd be better off NOT using repeat, but having a loop until you detect that the button is released. So even if you assign direct to the Lua plug-in rather than use an event as I suggested, try it as follows: 1. Assign "press" to the plug-in, but NOT repeating 2. Assign LuaSet to the button release, with a flag number (eg 0) 3. Revise your plug-in like this: while 1 do ipc.clearflag(0) ipc.control (70481,2147483647) ipc.sleep (400) if ipc.testflag(0) then ipc.exit() end end This way it is loaded once, and the timing of your increment/decrement actions is fully controlled. Pete Link to comment Share on other sites More sharing options...
Dominik Posted March 2, 2018 Author Report Share Posted March 2, 2018 Hello,Thank you for your reply and help. The script works almost well, the data changes at a good speed, the sleep function works, FPS do not fall, but after releasing the button, the data changes. The loop works all the time.I changed the code to: while 1 do ipc.control (70481,2147483647) ipc.sleep (400) end and in fsuipc I set the LuaKill to work after releasing the button.Now it works very well.Why does the loop still work on your code when you release the button? Regards, Dominik. Link to comment Share on other sites More sharing options...
Pete Dowson Posted March 2, 2018 Report Share Posted March 2, 2018 1 hour ago, Dominik said: and in fsuipc I set the LuaKill to work after releasing the button.Now it works very well. That will work but it very "unfriendly", killing threads is only a last measure. 1 hour ago, Dominik said: Why does the loop still work on your code when you release the button? Because of this line: if ipc.testflag(0) then ipc.exit() end It will exit and therefore terminate normally if the Flag (flag 0 in this case) is set. You need to assign the button release to "LuaSet" with the Lua name and 0 as a parameter! Pete Link to comment Share on other sites More sharing options...
Dominik Posted March 2, 2018 Author Report Share Posted March 2, 2018 Of course, LUASET - everything works correctly.Thank you again for help.Regards,Dominik Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now