我使用TinyThread ++构建了自己的线程库。它工作得很好,对我来说这也是一个很好的学习经验。我有自己的数据结构来传递消息,界面对我来说很有意义,主要是因为我是它的作者。与pthreads一起使用Win32 API功能
每当在我的系统中创建一个线程时,它会在一个循环中运行,并通过我自己设计的消息传递协议偶尔检查消息。
现在我想开始使用一些Windows API功能,并且Windows有自己的一套约定和消息队列等。现在我很确定TinyThread ++使用pthreads。由于我使用MinGW,我想知道是否在Windows线程上实现了pthread。如果是这种情况,我可能会将我的pthreads线程视为windows线程。但如果不是,我怀疑我可能会遇到一些奇怪的行为。
编辑:查看由Tinythread给出的thread
类型++,它看起来像它实际上使用了Windows 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");
}
你永远不会退出'while'循环。 – GSerg
你是对的。我还没有弄清楚我可以如何处理清理。 –
@GSerg,因为'GetMessage'在接收到'WM_QUIT'时返回0,我应该跳出while循环,对吧? –