[fpc-pascal] USB Human Interface Devices
James Richters
james at productionautomation.net
Thu Aug 29 03:24:24 CEST 2019
I have the critical section working now with init and done. Thanks for the information! For my test program I don't think I need it, but when I integrate it into the real project I will need to write to the same variables at different times, so I'll make sure to define the writes in critical sections.
James
-----Original Message-----
From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> On Behalf Of Stefan V. Pantazi
Sent: Wednesday, August 28, 2019 5:46 PM
To: fpc-pascal at lists.freepascal.org
Subject: Re: [fpc-pascal] USB Human Interface Devices
Yeah you are right, Windows was less forgiving. Sorry about that and thank you Jean.
For simple data structures written only from one thread, using critical section may be overkill. But if your data structure is a queue or a longer buffer, with length, etc. that is being produced by one thread and consumed by another (i.e., modified by more than one thread) then you should use some form of synchronization such as a critical section.
On 8/28/19 7:26 AM, James Richters wrote:
> 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_wit
> h_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-bounces at lists.freepascal.org> On Behalf
> Of Jean SUZINEAU
> Sent: Wednesday, August 28, 2019 7:04 AM
> To: fpc-pascal at 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.h
> tml
> The one of InitCriticalSection:
> https://www.freepascal.org/docs-html/rtl/system/initcriticalsection.ht
> ml
>
> 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-syncha
> pi-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 at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
--
_______________________________________________________
_______________________________________________
fpc-pascal maillist - fpc-pascal at lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list