Есть Win32 приложение, создается окно с WinPorc и т.д. Все стандартно.
Есть некий массив структур, на основании которых обновляется ListView в окне. Вызов функции - обновить инфу. Обновление вынесено в отдельную функцию.
В этом же неком массиве структур есть указатель на эту самую функцию обновления. Таким образом, вызвав эту функцию из любого элемента массива структур - обновится информация по данному элементу.
Вот прототип ф-ии
- Код: Выделить всё
typedef void (__stdcall *updteinfo) (void*, int, LPTSTR);
В структуре поле объявляется так
- Код: Выделить всё
updteinfo FnUpdate;
Далее. Есть библиотека, в которую передается указатель на массив данных структур. В данной библиотеке есть функция, которая вызывается из основного приложения. Эта функция создает поток бесконечно зацикленный, который юзает массив структур. В этом же потоке может создавать еще несколько потоков и т.д. В любом из потоков может быть множество вызовов функции по указателю в структуре, которая обновляет все тот же ListView.
В этой же библе есть другая функция, которая должна останавливать потоки. Остановка происходит корректно, ожидая завершения всех потоков. После остановки всех потоков, мы вызываем у каждого элемента массива структур нашу функцию с определенными параметрами (т.е. знаем что и как должно обновиться). Ну например мы вызываем функцию так, что ListView в каждой строке будет иметь символ @ например.
Но! Тут проблема.
После завершения потока в библе (всех потоков), остались...как бы это сказать. В общем поток закончен, а ListView еще обновляется. Т.е. мы ожидаем что после завершения всех потоков в listview будут символы @, а на самом деле туда попадает какое-то последнее обновление.
Получается, что какие-то сообщения не обработал поток основной программы а не библиотечной. Это не очень хорошо, так как в ListView у нас появляется мусор, который уже не актуален.
Неправильная архитектура? Но я и не думал что что-то может доходить с запозданием до главного окна.
Что в общем сделать бы?
З.Ы. Надеюсь понятно объяснил