当条件产生时结束线程。 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++ 的相关文章

  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 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