У меня есть собственная библиотека потоков, созданная с использованием TinyThread ++. Это работает довольно хорошо, и это был также большой опыт обучения для меня. У меня есть свои собственные структуры данных для передачи сообщений, и интерфейс имеет для меня смысл, прежде всего потому, что я был его автором.
Всякий раз, когда в моей системе создается поток, он запускается в цикле и периодически проверяет наличие сообщений с помощью протокола передачи сообщений моего собственного устройства.
Теперь я хочу начать использовать некоторые функции Windows API, и в Windows есть собственный набор соглашений, очередей сообщений и т. Д. Теперь я почти уверен, что TinyThread ++ использует pthreads. Поскольку я использую MinGW, мне интересно, реализуется ли pthreads в потоках Windows. Если это так, я могу просто обработать свои потоки pthreads как потоки windows. Но если нет, я подозреваю, что могу столкнуться со странным поведением.
edit: глядя на тип thread
, заданный Tinythread ++, похоже, что он на самом деле использует окна HANDLE
для отслеживания потоков и даже использует _beginthreadex
для их порождения.
У меня вопрос: будет ли Windows счастлива, если я продолжу вызывать SetWindowsHookEx
с какого-то момента в моем коде pthreads? Я понимаю, что мне нужно иметь цикл опроса сообщений Windows в той же теме. Я намерен сделать что-то вроде этого:
try {
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc,
NULL, 0);
if (mousehook == NULL) printf("Mousehook error %u\n",GetLastError());
while(true) {
MSG msg;
if (GetMessage(&msg,0,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
UnhookWindowsHookEx(mousehook);
printf("Procedure completed without exceptional events.\n");
} catch (...) {
printf("Exception!\n");
}