我有自己的线程库,使用 TinyThread++ 构建。它工作得很好,对我来说也是一次很好的学习经历。我有自己的数据结构来传递消息,这个界面对我来说很有意义,主要是因为我是它的作者。
每当在我的系统中创建一个线程时,它都会循环运行,并偶尔通过我自己设计的消息传递协议(protocol)检查消息。
现在我想开始使用一些 Windows API 功能,Windows 有自己的一套约定和消息队列等。现在我很确定 TinyThread++ 使用 pthreads。由于我使用的是 MinGW,我想知道是否在 Windows 线程上实现了 pthreads。如果是这种情况,我也许可以将我的 pthreads-threads 视为 windows-threads。但如果没有,我怀疑我可能会遇到一些奇怪的行为。
编辑:查看由 Tinythread++ 给出的 thread
类型,看起来它实际上使用窗口 HANDLE
来跟踪线程和甚至使用 _beginthreadex
来生成它们。
我的问题是,如果我从我的 pthreads 代码中的某个点四处调用 SetWindowsHookEx
,Windows 会高兴吗?我意识到我需要在同一个线程中有一个 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");
}
最佳答案
那应该没问题。
如果您尝试将 pthread 线程 ID 传递给需要线程句柄的 Windows 线程函数,您可能会遇到麻烦,但在这里您只需要循环与 SetWindowsHookEx
保持在同一个线程中。
关于windows - 将 Win32 API 功能与 pthreads 一起使用/从 pthreads 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560119/