Le 28/08/2019 à 13:26, James Richters a écrit :
Thanks for figuring out the critical section needs to be initialized.  Stefan's 
example did not do this:
https://github.com/svpantazi/libusbxhid/blob/master/libusbhid_test_with_thread.pp

maybe it's something you can get away with on Linux...
Maybe, it seems EnterCriticalSection is defined by the current thread manager. But if your variable is uninitialized, you can have anything in it, I think EnterCriticalSection cannot do anything reliable with it.
I'll put in the init and done.   Should I enter critical section only for 
writing to shared variables, or also when reading them?

You don't need to enter the Critical section to read the variable.

The critical section is essentially used to prevent the case where your main thread and your read  thread write two different values to the same variable at the same time. In this case without a critical section, you cannot predict the value of the variable. If the variable is always written by the same thread, you don't need the critical section.

I'm also wondering if there is some way to tell if a thread is currently 
running or not... I don't want to try to start it again if it's already 
running.  I can make some flag that the threat sets when it starts and clears 
when it exits, but I am wondering if there already something in place to check 
to see if a thread exists.

You can find whether your thread is running or not with the readThread.Suspended property,

but in your program, your thread is always running, it's nether suspended. It's just blocked in a call (to libusbhid_interrupt_read I guess)


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to