Я здесь новенький, но всегда находил помощь в прошлом. Я столкнулся со странной проблемой с простым блоком кода:
UINT ThreadMain(LPVOID pParam)
{
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
THREADDATA* pData = (THREADDATA*) pParam;
INT* pnEditBoxValue = pData->pnEditBoxValue;
UINT nEid = pData->nEditId;
PLC *parent = (PLC*)pParam;
bool trigger_basso = false;
m_thread_running = 1;
CDeCoMotorDlg* wnd = pData->pObjDlg;
while(m_keep_alive==1)
{
SleepEx(1, 0);
wnd->CheckDlgButton(nEid, TRUE);
}
m_thread_running = 0;
return 0;
}
Кажется, проблема связана с этой строкой:
wnd->CheckDlgButton(nEid, TRUE);
Строки работают хорошо (установлен флажок на gui), НО, если я нажму кнопку на моем GUI, которая устанавливает
m_keep_alive = 0
, тогда функция немедленно перестанет работать: я не вижу, что while l oop завершается должным образом, и я никогда не дойду до этой строки:
m_thread_running = 0;
Что странно, если я удалю эту строку
wnd->CheckDlgButton(nEid, TRUE);
, в то время как l oop завершится правильно, флаг установлен и поток завершается правильно ... Я схожу с ума ... есть предложения?
Большое спасибо