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... I'll put in the init and done. Should I enter critical section only for writing to shared variables, or also when reading them? 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. James -----Original Message----- From: fpc-pascal <fpc-pascal-boun...@lists.freepascal.org> On Behalf Of Jean SUZINEAU Sent: Wednesday, August 28, 2019 7:04 AM To: fpc-pascal@lists.freepascal.org Subject: Re: [fpc-pascal] USB Human Interface Devices Hello, It seems you didn't initialized you critical section using InitCriticalSection. The documentation of EnterCriticalSection : https://www.freepascal.org/docs-html/rtl/system/entercriticalsection.html The one of InitCriticalSection: https://www.freepascal.org/docs-html/rtl/system/initcriticalsection.html At the end, you need to call DoneCriticalSection to release the associated system resources ( https://www.freepascal.org/docs-html/rtl/system/donecriticalsection.html). Note: these is related to freepascal implementation of critical sections, in windows API, the function names are slightly different, InitializeCriticalSection/EnterCriticalSection/DeleteCriticalSection (https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-entercriticalsection) Le 28/08/2019 à 01:50, James Richters a écrit : > One thing I wasn't able to duplicate however was the use of > EnterCriticalsection(criticalSection); and > LeaveCriticalsection(criticalSection); when writing to shared variables. If > I try to ever use EnterCriticalsection(criticalSection); in the read thread, > My program just instantly locks up and I can't even break out of it. If I > try to use it in the main program I instantly get > EAccessViolation: Access violation > $00007FFF18A2DF23 > $00007FFF189E9BBC > $00007FFF189E9AD0 > $000000010000DCDA > $000000010000D54B > $000000010000218B PROCESS_USB_DATA, line 475 of WHB04B-4_test.pas > $0000000100002B37 SIMPLETERMINAL, line 641 of WHB04B-4_test.pas > $0000000100002DDD USE_MPG_DEVICE, line 675 of WHB04B-4_test.pas > $0000000100002F93 main, line 699 of WHB04B-4_test.pas > $0000000100002FE6 > $0000000100011350 > $0000000100001980 > $00007FFF17B47E94 > $00007FFF18A4A251 > Line 475 is EnterCriticalsection(criticalSection); > I left where I had the criticalsection stuff in the program but commented > out. It does seem to work fine without it though.. since the read, I am > curious what I'm doing wrong, or if I need to do something else because I'm > on Windows. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal