- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚在树莓派 3 上开始了我的第一个 C 语言项目,我想为触摸屏创建我的第一个 GUI 应用程序。我的目标是运行 while(1) 循环来控制树莓派 I/O 和 gtk_main 函数来打开一个简单的窗口。
调用 gtk_main() 后,其余代码不起作用。我知道这是由 gtk_main 创建它自己的循环引起的。有没有办法同时运行这两个循环?
#include <stdio.h> // Used for printf() statements
#include <wiringPi.h> // Include WiringPi library!
#include <gtk/gtk.h>
// Pin number declarations. We're using the Broadcom chip pin numbers.
const int pwmPin = 18; // PWM LED - Broadcom pin 18, P1 pin 12
const int ledPin = 23; // Regular LED - Broadcom pin 23, P1 pin 16
const int butPin = 21; // Active-low button - Broadcom pin 17, P1 pin 11
const int pwmValue = 0; // Use this to set an LED brightness
int main(int argc, char *argv[]){
int add = 0;
int sign = 1;
// Setup stuff:
wiringPiSetupGpio(); // Initialize wiringPi -- using Broadcom pin numbers
pinMode(pwmPin, PWM_OUTPUT); // Set PWM LED as PWM output
pinMode(ledPin, OUTPUT); // Set regular LED as output
pinMode(butPin, INPUT); // Set button as INPUT
pullUpDnControl(butPin, PUD_UP); // Enable pull-up resistor on button
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
// Loop (while(1)):
while(1)
{
if (digitalRead(butPin)) // Button is released if this returns 1
{
pwmWrite(pwmPin, pwmValue+add); // PWM LED at bright setting
digitalWrite(ledPin, LOW); // Regular LED off
add=add+(sign*50);
if (add==1000) sign=-1;
if (add==0) sign=1;
delay(50);
}
else // If digitalRead returns 0, button is pressed
{
pwmWrite(pwmPin, 1024 - pwmValue); // PWM LED at dim setting
// Do some blinking on the ledPin:
digitalWrite(ledPin, HIGH); // Turn LED ON
delay(75); // Wait 75ms
digitalWrite(ledPin, LOW); // Turn LED OFF
delay(75); // Wait 75ms again
}
}
}
最佳答案
gtk_main
是 documented如:
Runs the main loop until
gtk_main_quit()
is called.You can nest calls to
gtk_main()
. In that casegtk_main_quit()
will make the innermost invocation of the main loop return.
所以你需要一些callback 显式调用gtk_main_quit
(我猜你没有)。
所以这种行为是预期的。您可能想要处理 "delete-event"
GTK signal在您的窗口
上(通过让您的GTK信号处理程序为该事件显式调用gtk_main_quit
)。您需要阅读更多内容,特别是关于 GTK event loop ,和GObject's signals .
如果你想poll(2)和 read(2)对于某些设备,您最好在 GTK 事件循环内执行此操作(例如,通过调用 g_source_add_unix_fd 或 g_io_channel_unix_new 等)。
您应该花几天时间阅读更多有关 Gtk 的内容,特别是它的 Getting Started章节。
关于c - gtk_main() 与 while(1) Raspberry Pi 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42370554/
我正在将使用 GTK 库的 GUI 应用到我的程序中。简而言之,每次有输入时我都会计算一个变量,然后使用 gtk_text_buffer 将输入显示在文本中。问题是,每当我收到输入时(一切都在 whi
我正在开发一个使用 C 和 unix 低级套接字的聊天应用程序。我已经成功制作了控制台版本,但我想为应用程序制作一个 GUI。我想将 GTK 用于 GUI。我的问题是如何“同步”套接字和 GUI。因为
这两个函数都是无限循环, 一旦在同一线程中调用,程序就会挂起。 gtk_main(); ... pcap_loop(adhandle, 0, packet_handler, NULL); 当我点击“开
我正在尝试开发一个基于 C 的应用程序,它嵌入了一个或多个 Python 解释器。我在 C 部分中使用 gtk-things,并在其中合理地调用 gtk_main()。 Python 解释器是使用 P
我刚刚在树莓派 3 上开始了我的第一个 C 语言项目,我想为触摸屏创建我的第一个 GUI 应用程序。我的目标是运行 while(1) 循环来控制树莓派 I/O 和 gtk_main 函数来打开一个简单
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我是一名优秀的程序员,十分优秀!