Как вызвать функцию в потоке? Есть 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 ?
Просто если напрямую то краш из за вызова не в том потоке.

21 Авг 2019 в 06:28
213 +1
0
Ответы
1

Для того чтобы вызвать функцию из основного потока (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 можно вызвать нужную функцию в нужном потоке.

20 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир