コードが実際に実行されているスレッドを確認する手段として、QThread::currentThreadId()を使用します。ただし、この関数から返されるQt::HANDLE型は、ドキュメントによると、プラットフォームに依存する typedef です。私のプラットフォーム (Linux) では、単純にvoid *
(typeless pointer) の typedef でした。
qDebug()
では、たとえば を使用してこれを印刷するにはどうすればよいでしょうQString
か。
コードが実際に実行されているスレッドを確認する手段として、QThread::currentThreadId()を使用します。ただし、この関数から返されるQt::HANDLE型は、ドキュメントによると、プラットフォームに依存する typedef です。私のプラットフォーム (Linux) では、単純にvoid *
(typeless pointer) の typedef でした。
qDebug()
では、たとえば を使用してこれを印刷するにはどうすればよいでしょうQString
か。
次の2つの支援機能を使用して、これを自分で修正しました。これは、他のケースや他のプラットフォームでも役立つ可能性があるため、void *
代わりにタイプとして使用することを選択したことに注意してください。Qt::HANDLE
//Allow Qt::HADNLE and void * to be streamed to QDebug for easier threads debugging
QDebug operator <<(QDebug d, void *p){
d.nospace() << QString::number((long long)p, 16);
return d.space();
}
//Allow Qt::HADNLE and void * to be added together with QString objects for easier threads debugging
const QString operator+ ( const QString &s, void *p ){
return (s+ QString::number((long long)p, 16));
}