完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,我开启两个线程,第一个线程会使用CCyControlEndPoint不断获取CY3014固件的版本号。第二个线程中会使用CCyBulkEndPoint来定时传输批量数据,每次传输数据的过程如下:首先resetEndPoint,然后设置传输大小SetXferSize,在之后BeginDataXfer等操作。然后两个线程同时操作的时候,就会出现以下情况:第二个线程resetEndpoint之后,如果第一个线程此时获取了一次固件版本号,那么第二个线程的SetXferSize就会卡住,线程无法继续运行。有谁遇到过类似问题么?
|
|
相关推荐
1个回答
|
|
你的问题可能是由于线程竞争导致的。两个线程同时操作同一个设备,可能会引发资源竞争的问题。
为了解决这个问题,你可以尝试使用互斥锁(mutex)来保护数据的访问。具体步骤如下: 1. 在每个线程中创建一个互斥锁。你可以使用Windows提供的`CRITICAL_SECTION`或者C++11的`std::mutex`。 2. 在第一个线程中,访问`CCyControlEndPoint`之前,先锁定互斥锁。然后完成相关操作后,解锁互斥锁。 3. 在第二个线程中,访问`CCyBulkEndPoint`之前,先锁定互斥锁。完成相关操作后,解锁互斥锁。 4. 保证在每个线程中,只有一个线程可以访问到对应的设备接口。 通过使用互斥锁,你可以确保每个线程在访问设备接口时不会相互干扰,避免资源竞争问题。 另外,你还可以考虑使用信号量(semaphore)来进行线程同步,确保两个线程的顺序执行。只有当第一个线程完全执行完毕之后,第二个线程才开始执行相关操作。这样可以确保不会发生线程之间的冲突。 希望能帮助到你! |
|
|
|
只有小组成员才能发言,加入小组>>
752个成员聚集在这个小组
加入小组2069 浏览 1 评论
1826 浏览 1 评论
3639 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1760 浏览 6 评论
1510 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
507浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
357浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
410浏览 2评论
357浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
854浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 16:32 , Processed in 0.841132 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号