小编Ale*_*exP的帖子

如何检查事件循环是否在线程外有待处理事件?

调用QCoreApplication::hasPendingEvents()QAbstractEventDispatcher::instance()->hasPendingEvents()在线程内部工作正常.但是,在它之外,后者(具有适当的参数)总是返回false(前者不能在外部使用,因为它指的是从中调用它的线程).

这是一个完整的代码:

#include <QCoreApplication>
#include <QAbstractEventDispatcher>
#include <QThread>
#include <QDebug>

bool hasPendingEvents(QThread *thread = 0) {
  return QAbstractEventDispatcher::instance(thread)->hasPendingEvents();
}

class MyObject: public QObject {
  Q_OBJECT

public slots:
  void Run() {
    qDebug() << __LINE__ << hasPendingEvents() << QCoreApplication::hasPendingEvents();
    QThread::sleep(1);
  }
};

int main(int argc, char *argv[]) {
  QCoreApplication app(argc, argv);

  QThread thread;
  MyObject t;
  t.moveToThread(&thread);
  thread.start();
  for (int i = 0; i<4; ++i) QMetaObject::invokeMethod(&t, "Run", Qt::QueuedConnection);

  for (int i = 0; i<10; ++i) {
    QThread::msleep(500); …
Run Code Online (Sandbox Code Playgroud)

qt multithreading event-loop qthread qt5

7
推荐指数
1
解决办法
1790
查看次数

COM端口的设备仿真

我有一个设备将数据发送到COM端口.我想在没有插入时模拟这个设备.我认为这可以通过简单地将数据发送到特定的COM端口来实现:

int main() {
    char *port = "\\\\.\\COM40";

    HANDLE hCom = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hCom==INVALID_HANDLE_VALUE) return 0;

    DWORD writeBytes;
    int buffer = 0xDEADBEAF;
    BOOL success = WriteFile(hCom, &buffer, 4, &writeBytes, NULL);

    FlushFileBuffers(hCom);
    Sleep(1000);

    HANDLE hCom2 = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (hCom2==INVALID_HANDLE_VALUE) return 0; // Exit. GetLastError() == 5

    DWORD readBytes;
    success = ReadFile(hCom2, &buffer, 4, &readBytes, NULL);

    CloseHandle(hCom);
    CloseHandle(hCom2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,第二个 …

c++ winapi createfile

3
推荐指数
1
解决办法
2633
查看次数

标签 统计

c++ ×1

createfile ×1

event-loop ×1

multithreading ×1

qt ×1

qt5 ×1

qthread ×1

winapi ×1