Есть 1й поток (аля атач DLL а именно DllMain) и он создает еще поток через _beginthread.
И еще хукается функция WndProc.
WndProc вызываеться в первом потоке (тот же что и DllMain) и тут вопрос.
Как из WndProc вызвать функцию так чтобы ее выполнил поток который был создан ?
Просто если на прямую то будет краш. Пробовал делать BOOL перемененную и менять ее в 1 потоке а во втором проверять ее значение. Оно та как то работает но глючно и это говнокод кажысь.
Вы не понимаете, что такое потоки... У потоков нет методов! Методы, это участки кода, по которым проходят потоки. Если код изменяет какие-то данные, и есть возможность, что этот код будет выполняться более, чем в одном потоке одновременно, потоки нужно синхронизировать, чтоб они не пытались менять-проверять эти данные одновременно. Ваша BOOL переменная, это те самые данные. Соответственно, на код, который ее меняет, и который проверяет, нужно ставить мьютекс. А иначе результат просто непредсказуем.
А что происходит во второй цепочке? Напрямую вызвать ее нельзя (после запуска), надо ей тем или иным способом послать сообщение. Ваша булевская переменная это оно и есть
Ну а как сделать это нормально ?
2й поток идет под sleep 10 а я отслежываю нажатие кнопки.
И не будет такого что кнопку оно не заметило или чет такое ?
Recardo_Recoly, Вам надо дождаться сигнала от первого потока?
Тогда делайте через семафоры к примеру. Во втором потоке создаете пустой семафор и пытаетесь в него войти (WaitForSingleObject), в первом работаете, а потом освобождаете семафор. Тут-же вторая цепочка успешно в него входит и начинает работать.