Я запустил приложение с 2 потоками. Один поток, сохраняющий изображения, извлекается из камеры, а другой поток обрабатывает эти изображения, проблема здесь в том, что поток обработки останавливается (зависший или заблокированный не может получить его) в середине обработки через несколько (случайных в каждый момент времени) часов. , но он отлично работает на i3 с Windows7, а также в двухъядерном процессоре с WindowsXp. В обоих потоках нет критической секции или блокировки. Пожалуйста, помогите мне решить эту проблему.
Код из потока 2:
fn_Waitforfiles(); // while loop waits until the 4 images saved in watch folder if not it will return at count of 50
CString strLog = "";
strLog.Format("Entering Skipping..");
for(int d = 1; d <= m_iInterLeave; d++)
{
m_ifileCount++;
m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount);
if(PathFileExists(m_strcurFilePath))
::DeleteFile(m_strcurFilePath);
else
{
m_ifileCount--;
m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount);
}
if(d == m_iInterLeave)
{
m_ifileCount++;
m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount);
}
}
strLog = "";
strLog.Format("Skipped %d images on Interleaving..", m_iInterLeave);
MSSLOGGER::WriteLog(_T(strLog));
После записи лога «Enter Skipping ..» thread2 больше не работал
Подсказка, вероятно, в «просмотре изображений в папке». Похоже, вы полагаетесь на уведомления об изменении файла, и их можно пропустить (точнее, некоторые из них могут быть объединены в одно сводное уведомление).
Других решений пока нет …