Я изучаю использование PThread.
Основной процесс открывает камеру и получает матрицу.Затем вызывает поток, выполняющий задание в роботе, и я хочу, чтобы он был параллельным.В основном это работает и работает.Но все еще чувствую себя непрофессионально - из-за bool
.
В приведенном ниже коде это пример (с fprintf
).
Я хотел бы знать, как я могу исправитьэто без вреда параллелизма.
В следующем коде я не показываю звонок роботу или открытию камеры.
Есть ощущение, что нужен мьютекс.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <opencv2/opencv.hpp>
#include <unistd.h> /// for sleep
bool inThread = false;
void *print_message_function( void *ptr );
int main()
{
char mkey = 0;
pthread_t thread1;
char *message1 = "Thread 1";
int iret1;
cv::Mat bgr_image = imread("image.bmp",cv::IMREAD_COLOR);
while(mkey!=27){
if(!inThread){
inThread = true;
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
}
printf("In Main");
imshow("mat", bgr_image);
mkey = cv:: waitKey(5);
}
return 0;
}
void *print_message_function( void *ptr )
{
char *message;
message = (char *) ptr;
printf("%s \n", message);
sleep(2);
inThread = false;
pthread_exit(NULL);
}
Код отлично работает и не падает, но кажется непрофессиональным.Есть ли вероятность, что при обновлении флага он проверит, что находится во флаге, и упадет?