我想使用CancelSynchronousIo()函式,所以我需要一個執行緒句柄。在我的 QT 應用程式中,我有兩個執行緒: mainThread ( gui ) 和 secondThread 用于計算。我想CancelSynchronousIo()在 mainThread 中使用來取消 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() 的值相同
uj5u.com熱心網友回復:
您需要QThread::currentThreadId(),它回傳執行它的執行緒的ID,即它呼叫GetCurrentThreadId()。然后,您可以通過使用該 ID呼叫OpenThread()來獲取句柄。
請注意,這與GetCurrentThread()不同,后者回傳一個僅表示“當前執行緒”的常量。
uj5u.com熱心網友回復:
據我所知,QThread并沒有提供訪問任一HANDLE或ID底層作業系統的執行緒。我能想到的獲取執行緒的唯一方法HANDLE是從中派生一個新類QThread并覆寫其虛擬run()方法以執行以下操作之一:
呼叫
QThread::currentThreadId()(或GetCurrentThreadId()直接呼叫),然后將回傳的值傳遞ID給OpenThread().呼叫
GetCurrentThread(),然后將回傳的偽句柄傳遞給DuplicateHandle()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381132.html
上一篇:使用并發影像包的奇怪例外行為
下一篇:Grid中的ListView有沒有辦法繼承網格的ColumnDefinitions和RowDefinitions?
