windows - 将 Win32 API 功能与 pthreads 一起使用/从 pthreads 使用

标签 windows multithreading winapi pthreads

我有自己的线程库,使用 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/

相关文章:

c++ - 热键、快捷键和加速键有什么区别?

java - 从 Java date.getHour() 获取 Linux 和 Windows 的时差

c++ - 公平队列丢失通知

c# - 如何使用 TPM(可信平台模块)加密字节

Python:用土耳其语字母阅读和打印土耳其语的问题

维护进程池的 Java 库

android - 从其他线程处理 UI

c++ - 在 C++ 中使用线程

c++ - 在对话框窗口中使用 ListControl

c++ - Win32 C++ 在运行时为 MenuItem 分配/更改快捷键