Проблемы с потоками
Добрый день, господа. Есть один вопрос - в моей программе наблюдается некий глюк при работе с потоком. В программе в отдельном потоке (использую TThread) производится обмен данными по RS232, и вывод данных на форму. Вывод делается приблизительно через каждые 100ms, сама функция вызывается через Synchronize(). Так вот, собственно, проблема: иногда (где-то один случай на десять-двадцать) программа виснет, т.е. форма обновляется и перерисовывается, но ни на какие действия не реагирует... Я никак не могу понять, в чем же здесь проблема... Меня смущает именно тот факт, что форма перерисовывается, т.е. по идее WM_PAINT до нее доходит. Но тогда я не понимаю, почему до нее не доходят WM_MOUSEDOWN, WM_KEYPRESS и все подобное...
Цитата: engel65536
Добрый день, господа. Есть один вопрос - в моей программе наблюдается некий глюк при работе с потоком. В программе в отдельном потоке (использую TThread) производится обмен данными по RS232, и вывод данных на форму. Вывод делается приблизительно через каждые 100ms, сама функция вызывается через Synchronize(). Так вот, собственно, проблема: иногда (где-то один случай на десять-двадцать) программа виснет, т.е. форма обновляется и перерисовывается, но ни на какие действия не реагирует... Я никак не могу понять, в чем же здесь проблема... Меня смущает именно тот факт, что форма перерисовывается, т.е. по идее WM_PAINT до нее доходит. Но тогда я не понимаю, почему до нее не доходят WM_MOUSEDOWN, WM_KEYPRESS и все подобное...
говорят TThread глючный... используй WIN API CreateThread
Когда я решил попробовать WinAPI - возникла проблема. Функция потока является членом класса, а в CreateThread() ему нужна просто функция, т.е. он ругается на "Cannot convert 'unsigned long (__stdcall * (_closure )(void *))(void *)' to 'unsigned long (__stdcall *)(void *)'", т.е. насколько я понимаю, ему не нравится, что моя функция - член класса, т.е. __closure.
Никак не могу понять, эта проблема каким образом может быть устранена или обойдена?..
Статическая функция уже по этому указателю вызовет нужную функцию объекта.
А вот тут у меня меня возникает еще одна проблема - я не могу изменять список параметров функции потока, ибо этот список устанавливается свыше виндой, причем сама функция является при всем при этом еще и CALLBACK'ом...