【发布时间】:2022-01-16 19:49:10
【问题描述】:
我想使用CancelSynchronousIo() 函数,所以我需要一个线程句柄。在我的 QT 应用程序中,我有两个线程: mainThread ( gui ) 和 secondThread 用于计算。我想在 mainThread 中使用 CancelSynchronousIo() 来取消 secondThread 中的操作。我不知道如何从 Qt 类中获取 winapi 线程句柄。
我试过了:
主线程:
thread = new QThread(this);
simpleObject = new SimpleClass();
connect(this, &MainWindow::getHandle, simpleObject , &simpleClass::getHandle);
simpleObject->moveToThread(thread);
thread->start();
SimpleObject,在第二个线程中:
void simpleClass::getHandle() // this is slot in simpleObject, which is in the second thread
{
emit handleFromSecondThread(GetCurrentThread());
}
我看到第二个线程中 GetCurrentThread() 的值与 mainThread 中 GetCurrentThread() 的值相同
【问题讨论】:
-
我看到第二个线程中 GetCurrentThread() 的值与 mainThread 中 GetCurrentThread() 的值相同,因为这个 api 总是返回
( (HANDLE)(LONG_PTR) -2 )跨度> -
@RbMm 是的,你是对的。我总是得到
0xfffffffffffffffe。但是该怎么做呢? -
我认为 IO 线程上的
OpenThread(READ_CONTROL | THREAD_QUERY_INFORMATION, FALSE, QThread::currentThreadId())之类的东西应该给你句柄。唯一的问题是如何最好地将该 HANDLE 值传达给想要进行CancelSynchronousIo调用的其他线程。没有看到更多代码很难说更多。