当条件产生时结束线程。 C/C++

2024-03-09

我有一个 C 代码,用于检查鼠标的左下角是否已被按下。它工作正常,但我不知道如何在调用 Final() 函数后取消挂钩并退出当前线程。

这是代码:

LRESULT CALLBACK mouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
static int count = 0;
static int finalNum;
if (count==0){
    //////Generate random number 
    srand(time(NULL)); // Seed the time
    finalNum = rand() % (150 - 50) + 50; // Generate the number, assign to variable.
    ////////////////////////////////////////////////////////////////////////////
}
//int count = 0;
MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    if (pMouseStruct != NULL){
        if (wParam == WM_LBUTTONDOWN)
        {
            count++;
            printf("%d",count);
            if (count==finalNum){ // user clicked random times the mouse so we launch the final function
                printf("\ndone!\n");
                final();

            }
            printf("clicked");
        }
        printf("Mouse position X = %d  Mouse Position Y = %d\n", pMouseStruct->pt.x, pMouseStruct->pt.y);
    }
    return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}

DWORD WINAPI MyMouseLogger(LPVOID lpParm)
{
    HINSTANCE hInstance = GetModuleHandle(NULL);
    // here I put WH_MOUSE instead of WH_MOUSE_LL
    hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, hInstance, NULL);
    MSG message;

    while (GetMessage(&message, NULL, 0, 0)) {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    UnhookWindowsHookEx(hMouseHook);
    return 0;
}

void custom_delay(){

}

int main(int argc, char *argv[])
{
    int count = 0;
    HANDLE hThread;
    DWORD dwThread;
    //////Generate random number to call a function after rand() number of clicks
    srand(time(NULL)); // Seed the time
    int finalNum = rand() % (150 - 50) + 50; // Generate the number, assign to variable.
    ////////////////////////////////////////////////////////////////////////////

    printf("%d", finalNum);
    hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyMouseLogger, (LPVOID)argv[0], NULL, &dwThread);
    if (hThread)
        return WaitForSingleObject(hThread, INFINITE);
    else
        return 1;
    }
printf("Keep going");
}

我尝试过 ExitThread(0);但它会关闭所有线程,而不仅仅是 MyMouseLogger 进程来打印“继续”。

我该怎么做呢?

感谢您的帮助!


您可以使用 PostThreadMessage 向线程发送 WM_QUIT,这将导致其消息循环退出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当条件产生时结束线程。 C/C++ 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • VBA 是否包含注释块语法? [复制]

    这个问题在这里已经有答案了 在VBA中是否有一种简短的方法来注释掉代码块 就像java使用的那样 尽管没有语法 您仍然可以使用内置的块注释按钮来接近 如果您尚未查看 编辑 工具栏 请右键单击工具栏并启用 编辑 工具栏 然后 选择一段代码并点
  • Drupal 的搜索模块可以搜索子字符串吗? (部分搜索)

    Drupal核心搜索模块 仅搜索关键字 例如 三明治 我可以使用子字符串进行搜索吗 例如 三明治 并返回我的三明治结果 也许有一个插件可以做到这一点 最直接的模块可能是模糊搜索 http drupal org project fuzzyse
  • 使用mockito使用依赖的泛型参数对方法进行存根

    我试图用依赖的通用参数来存根一个方法 如下所示
  • 我如何开始使用 Wicket? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 仅通知 Teams 机器人的服务 URL

    我正在开发一个仅通知团队机器人 仅限于单个天蓝色广告租户的成员 根据本文档 https learn microsoft com en us microsoftteams platform resources bot v3 bots cont
  • Angularjs:类型错误:无法调用 null 的方法“insertBefore”

    请在这里找到小提琴http jsfiddle net UxYLa 6 http jsfiddle net UxYLa 6 这是我正在尝试做的事情的简化形式 有两个指令 一个是嵌套的 subDirective 它根据选择 随机 动态创建 ht
  • PHP 中的对象克隆是什么?

    有人可以解释一下吗 PHP 中的对象克隆是什么 我什么时候应该在 php 中使用克隆关键字 对象克隆是制作对象副本的行为 作为Cody https stackoverflow com questions 2144506 what is ob
  • 调用 B2C 安全 Function App API 的 Angular 应用程序收到 500,Function 收到 404

    Angular网站托管在Azure 存储帐户 as a 静态网站当调用 Azure B2C 保护时收到 500功能应用程序功能 该函数正在接收 404 Update 这个问题的原始标题是 调用 B2C 安全函数的 Angular 应用程序接
  • 当 App Store 发布新更新/版本时如何通知用户? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我的 iPhone 应用程序启动时 我想通知用户 App store 上是否有新的更新 版本发布 有人有什么想法或者其他人取得过类似
  • N层数据库应用程序不使用ORM,UI如何指定需要显示的数据?

    我正在这里寻找指示和信息 我将制作此 CW 因为我怀疑它没有一个正确的答案 这是针对 C 的 因此我将在下面引用 Linq 我也为这么长的帖子道歉 让我在这里总结一下这个问题 然后是完整的问题 摘要 在 UI BLL DAL DB 4 层应
  • 将 Finder Sync Extension 中的安全范围书签与应用程序组 UserDefaults 一起使用

    在我的查找器同步扩展中解析安全范围书签时 我收到以下错误 错误域 NSCocoaErrorDomain 代码 259 无法打开该文件 因为它的格式不正确 也可能是相关日志记录 https stackoverflow com question
  • 如何列出所有 CMake 构建选项及其默认值?

    如何在命令行中列出 cmake 默认构建选项 我需要从源代码构建 OpenCV 库 在此之前 我想知道默认的构建设置是什么 cmake LAH 列出所有option and set CACHE 变量 包括标记为高级的变量 执行以下操作 cm
  • Python:发出嘟嘟声

    我试图让程序给我发出嘟嘟声 我在 Windows 机器上 我看过http docs python org library winsound html http docs python org library winsound html 但不
  • Tkinter - 检查应用程序是否具有焦点

    我正在尝试子类化Tk暂停音频的地方当且仅当整个应用程序失去焦点 即Tk实例失去焦点并且焦点没有传递给Toplevel or messagebox小部件 我设法让它有点像 黑客 一样工作 当一个messagebox是开放的 它是最后一个孩子T
  • 需要 excel 宏 - vba 的帮助

    有一套SUMIF我需要经常调整的公式 我唯一需要调整的是它的第三部分 每次运行宏时 第三部分或总和范围列需要向右移动 1 列 例如 我的公式可以是 SUMIF A 1 A 10 A15 C 1 C 10 我希望能够运行一个宏来调整上述内容
  • 如何在flutter中创建和导出csv文件?

    我有列表数据 List
  • 黄瓜与 TestNG

    我们在 TestNG 中使用 Selenium WebDriver 有一个非常广泛的框架 我希望能够继续使用它 但使用 Cucumber BDD 我知道 Cucumber 可以与 JUnit 一起使用 但不确定它是否可以与 TestNG 一
  • 从 USB 闪存驱动器自动运行程序 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在互联网上寻找配置闪存驱动器以自动播放位于其根文件夹中的文件的方法 但似乎没有任何效果 目前 我有一个presentation html 文件
  • 如何使用 javascript 在 getSelection() 中查找所选文本的索引?

    我正在尝试将样式应用于用户选择的文本 鼠标拖动 为此我需要获取所选文本的开始和结束索引 我尝试过使用 indexOf 方法 但它返回所选子字符串的第一次出现 我想要子字符串相对于原始字符串的实际位置 例如 如果我选择位置 3 处的字母 O
  • 当条件产生时结束线程。 C/C++

    我有一个 C 代码 用于检查鼠标的左下角是否已被按下 它工作正常 但我不知道如何在调用 Final 函数后取消挂钩并退出当前线程 这是代码 LRESULT CALLBACK mouseProc int nCode WPARAM wParam