-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integration into main-loop application #19
Comments
This might be a good idea. However, I don't see the problem with requiring users to create a separate thread. Are you using this on a very constrained platform? |
I'm looking at this from more of a design side. Using the same main-loop for the whole application makes lock and mutexes unnecessary which simplifies development (and debugging). Am I assuming right that all the callbacks are executed in the context of the thread that executes |
The run method is simply a loop around a blocking network read to receive events from the daemon. Do you mean you want the poll method to do a non-blocking read, and if a case a event was received dispatch that? Or do you want the read-loop to be run in an internal thread, and poll to dispatch any received events. I think the first alternative might be dangerous as running poll to seldom would cause a buildup. The gain with the second alternative is only the simplicity of a single threaded application. If more people think this is a good idea I will implement it. |
Maybe it would be nice if the socket fd was exposed so one could select on 2016-02-07 14:57 GMT+01:00 Fabian Bergmark [email protected]:
|
A third option would be to implement the connection to the daemon also in a non-blocking, asynchronous way (for example using Asio). |
Keep in mind that the solutions have to be compatible with SWIG, so working with sockets directly sounds scary. If the only concern is on which thread the event callbacks are executed, using a single mutex to get the same single-threaded flow isn't to much of a hassle in my opinion, but I do agree that the blocking run function isn't very pretty. |
I also would like to have a non-blocking function. With this, it would be easier to integrate into other systems that wait for other (e.g. TCP-based) connections. |
But a providing a non-blocking poll function that you could call in a select loop would affect delay if you don't use a very low timeout. I could expose the socket as an integer value but would that be usable from Java/Python? |
Looking at the (completely undocumented) header files and sample code ones comes to the conclusion that the blocking
Client::run()
method has to called for the library to function.I'd like to integrate Flic buttons into an existing main-loop based application. For this a blocking
run()
method is not ideal as I would need an extra thread to run it.For this kine of applications, I suggest adding a
poll()
method to theClient
class. A call topoll()
would dispatch the ready handlers/callbacks without blocking. I could then call this method in the existing main-loop without an additional thread.The text was updated successfully, but these errors were encountered: