Как создать поток внутри класса, используя System::Threading Visual C++
Мне нужно создать тему внутри моего класса LandingPage
чтобы запустить параллельную задачу, которую я могу приостановить / воспроизвести, используя событие кнопки. Платформа - Windows, и я работаю над WinForms.
Мой код:
public ref class LandingPage : public System::Windows::Forms::Form {
public:
LandingPage(void)
{
InitializeComponent();
this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(LandingPage, &LandingPage::CaptureImagesToLoad));
}
private: static System::Threading::Thread^ thr;
private: System::Void CaptureImagesToLoad() {
while (true) {
Fove::SFVR_BitmapImage image = this->dataCapture->GetEyeImageData();
this->dataCapture(&image, "C:\\Users\\Kapil\\Documents\\Dataset\\buffer.bmp");
this->eyePictureBox->ImageLocation(bufferingLocation);
}
}
};
Я получаю следующие ошибки:
Severity Code Description Project File Line Suppression State
Error C2440 'initializing': cannot convert from 'FOVEImageCapture::LandingPage' to 'FOVEImageCapture::LandingPage ^' FOVEImageCapture c:\users\kapil\desktop\project1\project1\myform.h 43
Error C3754 delegate constructor: member function 'FOVEImageCapture::LandingPage::CaptureImagesToLoad' cannot be called on an instance of type 'FOVEImageCapture::LandingPage' FOVEImageCapture c:\users\kapil\desktop\project1\project1\myform.h 43
Error C2512 'System::Threading::Thread::Thread': no appropriate default constructor available FOVEImageCapture c:\users\kapil\desktop\project1\project1\myform.h 43
Пример, который я нашел в Интернете, использует отдельный класс для определения функции, которая будет использоваться в потоке. Я не могу сделать это так, как мне нужно LandingPage
"s private
переменные. Как мне отредактировать мой код, чтобы он работал в качестве потока в классе?
1 ответ
Решение
Изменение этой строки:
this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(LandingPage, &LandingPage::CaptureImagesToLoad));
в
this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(this, &LandingPage::CaptureImagesToLoad));
работал на меня.