Как вызвать функцию в потоке? Есть DLL которая атачится к процессу и в ней есть функция.BOOL WINAPI DllMain(HINSTANCE dllHistance, DWORD callReason, void* reserved) { switch (callReason) { case DLL_PROCESS_ATTACH: { _beginthread(MainCM, 0, NULL); break; } } return 1; } Как можно вызвать функцию из WindowProc (основной поток) в потоке MainCM ? То есть вызов функции в WindowProc (перехват клавиш и по сути основной поток.) А чтобы она обработалась в потоке MainCM ? Просто если напрямую то краш из за вызова не в том потоке.
Для того чтобы вызвать функцию из основного потока (WindowProc) в потоке MainCM можно использовать механизм межпоточного взаимодействия, например, с помощью механизма событий или сообщений.
Один из способов это сделать - использовать функцию PostThreadMessage из Windows API для отправки пользовательского сообщения в поток MainCM. Например:
В функции WindowProc отправляем пользовательское сообщение в поток MainCM:
// Определение пользовательского сообщения #define WM_CUSTOM_MESSAGE WM_USER+1
// В функции WindowProc PostThreadMessage(dwThreadId, WM_CUSTOM_MESSAGE, 0, 0);
2. В потоке MainCM создаем цикл обработки сообщений и обрабатываем наше пользовательское сообщение: ```c++ // В потоке MainCM while (GetMessage(&msg, NULL, 0, 0)) { if (msg.message == WM_CUSTOM_MESSAGE) { // Вызываем нужную функцию } TranslateMessage(&msg); DispatchMessage(&msg); }
Таким образом, через отправку пользовательского сообщения из основного потока в поток MainCM можно вызвать нужную функцию в нужном потоке.
Для того чтобы вызвать функцию из основного потока (WindowProc) в потоке MainCM можно использовать механизм межпоточного взаимодействия, например, с помощью механизма событий или сообщений.
Один из способов это сделать - использовать функцию PostThreadMessage из Windows API для отправки пользовательского сообщения в поток MainCM. Например:
В функции WindowProc отправляем пользовательское сообщение в поток MainCM:// Определение пользовательского сообщения
#define WM_CUSTOM_MESSAGE WM_USER+1
// В функции WindowProc
2. В потоке MainCM создаем цикл обработки сообщений и обрабатываем наше пользовательское сообщение:PostThreadMessage(dwThreadId, WM_CUSTOM_MESSAGE, 0, 0);
```c++
// В потоке MainCM
while (GetMessage(&msg, NULL, 0, 0))
{
if (msg.message == WM_CUSTOM_MESSAGE)
{
// Вызываем нужную функцию
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Таким образом, через отправку пользовательского сообщения из основного потока в поток MainCM можно вызвать нужную функцию в нужном потоке.