AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 728698
Accepted
SteMMo
SteMMo
Asked: 2022-12-17 06:05:10 +0800 CST2022-12-17 06:05:10 +0800 CST 2022-12-17 06:05:10 +0800 CST

GTK 应用程序和串行端口处理程序

  • 772

我正在为嵌入式板上的 Linux 操作系统编写 GTK C 应用程序。

第一个主窗口打开一个串行(虚拟)端口,用于从条形码阅读器接收数据。我正在使用标准的 open() 函数(在我的 OpenPort() 函数中)。然后我调用 g_io_channel_new_file() 和 g_io_add_watch() 来处理 rx 信号。

我真的需要标准的 open() 调用吗?

    if (g_config.fdRfid==-1)
        g_config.fdRfid = OpenPort( g_config.portRfid, B115200);

    if (g_config.fdRfid!=-1)
    {
        ShowMainMessage();
        
        GError *error = NULL;
        g_ioChannel = g_io_channel_new_file( g_config.portRfid, "r", &error);
        if (g_ioChannel)
        {
            guint source = g_io_add_watch( g_ioChannel, G_IO_IN | G_IO_PRI, serialRfidWatcher, &g_config);
            printf("> set watch ioCh: %p - source: %d\n", g_ioChannel, source);
        }
        else 
            gtk_label_set_text( GTK_LABEL(g_labelMsg2), error->message);

当我按下一个按钮时,我打开一个对话框子窗口:在此之前,我通过 close() 函数关闭串行端口,并通过 g_io_channel_shutdown() 函数断开信号。返回的状态为 1 = G_IO_STATUS_NORMAL。

GIOStatus status = g_io_channel_shutdown( g_ioChannel, TRUE, NULL);
g_io_channel_unref(g_ioChannel);

if (g_config.fdRfid != -1) 
{
    ClosePort(&g_config.fdRfid);
}   

启动对话窗口,我再次打开相同的端口(这是一个用于测试的窗口),并以与之前相同的方式重新连接 rx 信号。
现在,如果我在调试输出中读取条形码(通过 printf),我会看到主窗口的信号处理程序和对话框中的处理程序都被调用。

关闭对话框(关闭端口和通道...)我返回到主窗口。如果我读取条形码,将触发三个处理程序,两个在主窗口上,一个在对话框上。

我怎样才能断开信号处理程序?我认为我的方法不完整..

谢谢!

serial-port
  • 1 1 个回答
  • 16 Views

1 个回答

  • Voted
  1. Best Answer
    SteMMo
    2022-12-22T03:39:51+08:002022-12-22T03:39:51+08:00

    解决了!
    我错过了电话

    g_source_remove(source)
    

    在关闭过程中。
    当然,我更改了行以创建source一个全局变量:

    /*guint*/ source = g_io_add_watch( g_ioChannel, G_IO_IN | G_IO_PRI, serialRfidWatcher, &g_config);
    
    • 0

相关问题

  • 在没有 kermit 和 lrzsz 的情况下通过串行检索文件

  • 如何防止为 cdc_acm 打开 DTR?

  • 在没有打开会话的情况下在后台运行 picocom

  • QEMU 4个以上的串口

  • 设置似乎没有 I/O 端口的 PCIe 串行卡

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve