私はポインタ(ImageInput)をQRunnable :: run()メソッドに渡そうとしています。コンパイラがコンパイルされ、エラーは発生しません。しかし、run()で変数を使用しようとすると、プログラムがクラッシュします。誰かが間違いがどこにあるか知っていますか?ここでQRunnableとポインタを渡す
は最小サンプルです:私はスレッドを作成してい
機能、(実際には1):I'amは、実行を使用して
bool framesource::MapRealToMat (std::vector<cv::Point3f> &PointVec)
{
cv::Mat TestMat = cv::Mat::ones(424, 512, CV_32FC1);
ThreadClass *Part1 = new ThreadClass(PointVec,&TestMat);
QThreadPool::globalInstance()->start(Part1);
}
クラス、()メソッド:
class ThreadClass : public QRunnable
{
public:
ThreadClass(std::vector<cv::Point3f> &PointVecInput, cv::Mat *ImageInput):
PointVec (PointVecInput),
Image (ImageInput)
{
}
private:
QMutex mutex;
std::vector<cv::Point3f> PointVec;
cv::Mat* Image;
void run();
};
void ThreadClass::run()
{
bool wait = true;
while(wait)
{
if(mutex.tryLock())
{
//Do something with the image, example:
cv::imshow("test",*Image);
mutex.unlock();
wait = false;
}
}
}
ポインタはaimMatを指し、これは8つのスレッドで満たされる必要があります。また、各スレッドは異なるイメージ領域で動作します。しかし、実際には私は1つのスレッドと1つのAOIしか使用していません。
ありがとうございました。
ありがとうございました!あなたが正しい。私は各スレッドを待つ必要があります。私はQThreadPool :: globalInstance() - > waitForDone()を使用しています。 、それは正常に動作します。 –