在GTK中,如何在允许主循环继续的同时等待按钮被按下?

问题描述 投票:1回答:1

我正在使用在GTK上运行GUI的Z80模拟器编写(对那些感兴趣的人为https://github.com/clancyj4/z80sim/tree/dev

我的问题是,我需要捕获IN操作码,并允许编辑窗口以提供IO代码。让我告诉你我到目前为止所拥有的:

/* get a byte (char?) from the input part of the Port window */
/* What we really want to do is have a queue */

BYTE IOPort_IN(int port)
{
  char whole_buffer[IOINBUFLEN * 4];            /* 4x in case of Hex */
  BYTE c;
  int i;

  if (IOPort[port] == NULL)                             /* struct exists? */
    Create_IOPort_Struct(port);

  printf("IOPort_IN: port=%d in_len=%d in_ptr=%d\n",
        port, IOPort[port]->in_len, IOPort[port]->in_ptr);

  if (IOPort[port]->in_len == 0)
  {
    sprintf(tstr, "Port %d requires input", port);
    Add_to_Log(tstr);
    show_log(TRUE);
    gtk_text_buffer_set_text(inportprompt_textbuffer, "Input Required", -1);

/* somehow keep the gtk main loop running so the interface updates and allows the editing of the ioportin_textbuffer,
but wait for the input submission button the be pressed */

    i = gtk_text_buffer_get_char_count(ioportin_textbuffer);
    printf("in port buff len is %d.\n", i);
  }

  return(c);
}

捕获操作码是可以的,并且会调用此函数。麻烦在于我不知道如何在中间实施注释。

目的是保留其余的模拟,但是在GTK主循环仍在运行的情况下,因此Log窗口等得到更新,我可以在IO窗口中输入一个字符串。但是它一直等到按下提交按钮。我可以通过设置标志来冻结Z80仿真,所以没问题。

[我很讨厌我没有很好地表达问题,所以请忍受并提出任何可以澄清这种情况的问题。

干杯,

贾斯汀。

c gtk scheduling
1个回答
0
投票

我回避了这个问题,如果还没有输入队列,则强制返回00。当然会有很多警告。

我仍然想知道如何使GTK在主线程上保持执行,直到激活了子窗口。当我知道时,我将答案放在这里。

© www.soinside.com 2019 - 2024. All rights reserved.