我使用Ubuntu 12.04和Qt 4.8.3版本。 在Qt主窗口中,我设法打开我的设备,这部分代码正在工作。 现在,当我打开设备后,如果存在卡片,我需要等待。这意味着我必须使用轮询从卡中获取数据。但是投票必须是无限循环。轮询卡的到达和删除。如何开始使用QT中的互斥锁定线程进行轮询?
示例针对每20毫秒到达一次卡的轮询以及当检测到卡时我需要每20毫秒切换一次卡轮询的轮询。因此,当检测到卡片到达或移除时,我的应用程序会发出Qt事件信号,以便另一个Qt线程现在可以继续读取/写入卡片。
我读了关于QThread,互斥量锁定等等,我有点困惑。 我有一个主窗口和一个工人类。在我的主窗口中,我编码为;
// Open a reader (from my SDK)
cReader.open
//If the reader is open use;
thread = new QThread();
worker = new Worker();
worker->moveToThread(thread);
connect(worker,SIGNAL(??????),SLOT(?????);
connect(worker,SIGNAL(?????),SLOT(?????);
.........
首先,我必须使用connect for SIGNAL/SLOT并启动卡到达/删除轮询。如果有任何卡检测到我有信号到另一个线程从卡读取或写入卡。
所以我不知道从哪里开始或如何调用信号/插槽?我需要帮助来填补??????信号/时隙上方。
编辑:我还需要轮询线程和卡处理线程共享的互斥锁。这是因为卡片轮询命令会打开我的mifare会话。
任何帮助,请, 亲切的问候,
在附注中,'QT'用于QuickTime。 'Qt'是你正在讨论的框架。 –
如果你只是轮询,你不需要*另一个线程。有一个(如果你需要非常确切的20毫秒,或者如果轮询调用实际上需要几毫秒),但你应该编写你的代码,以便它也可以单线程工作。因此,只需使用一个间隔为20 ms的重复“QTimer”,并且每个定时器信号执行轮询,将结果与先前的轮询结果进行比较,并在发生变化时发出信号。 – hyde
至于如何使用Qt信号和插槽,您应该只是简单地学习基本知识:http://doc.qt.io/qt-5/signalsandslots.html进行点对点介绍,如http:/例如/doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html。 – hyde