Странное поведение на MF C Thread - PullRequest
0 голосов
/ 27 мая 2020

Я здесь новенький, но всегда находил помощь в прошлом. Я столкнулся со странной проблемой с простым блоком кода:

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 завершится правильно, флаг установлен и поток завершается правильно ... Я схожу с ума ... есть предложения?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...