在pthreads中使用Win32 API功能

时间:2011-07-02 23:18:45

标签: windows multithreading winapi pthreads

我有自己的使用TinyThread ++构建的线程库。它运作得很好,对我来说这也是一次很棒的学习经历。我有自己的数据结构来传递消息,界面对我很有意义,主要是因为我是它的作者。

每当在我的系统中创建一个线程时,它就会循环运行,并偶尔通过我自己设计的消息传递协议来检查消息。

现在我想开始使用一些Windows API功能,windows有自己的约定和消息队列等等。现在我很确定TinyThread ++使用pthreads。由于我正在使用MinGW,我想知道是否在Windows线程上实现了pthreads。如果是这种情况,我可以将我的pthreads-threads视为windows-threads。但如果没有,我怀疑我可能会遇到一些奇怪的行为。

编辑查看Tinythread ++给出的thread类型,看起来它实际上使用了窗口HANDLE来跟踪线程,甚至使用{{1}产生它们。

我的问题是,如果我从pthreads代码中的某个位置调用_beginthreadex,Windows会不会高兴?我意识到我需要在同一个线程中有一个Windows消息轮询循环。我打算做这样的事情:

SetWindowsHookEx

2 个答案:

答案 0 :(得分:2)

那应该没事。

如果您尝试将pthread线程ID传递给需要线程HANDLE的Windows线程函数,则可能会遇到麻烦,但在这里您只需要将循环保留在与SetWindowsHookEx相同的线程中。

答案 1 :(得分:0)

在Windows上不存在Pthreads,除非你使用像cygwin这样的东西。无论哪种方式,API文档都说SetWindowsHookEx将与特定线程绑定的应用程序事件的挂钩关联到应用程序运行的桌面。因此它可以处理在线程中调用,但是您需要阅读文档,以便以一种为您提供所需行为的方式调用它。