【发布时间】:2020-04-19 20:49:56
【问题描述】:
我尝试运行以下代码,但是 wait_for_connection() 似乎在前两行之前运行,我似乎不明白为什么?我真的需要在调用wait_for_connection() 函数之前运行前两行。即使我在调用wait_for_connection()函数之前输入了sleep(1),它仍然会在前面几行之前运行。
我的代码如下:
void wait_for_connection() {
for (int i = 0; i < 10; i++) {
g_print("Checking server...\n");
if (connected == 1) {
g_print("Connected to: %s", selectedServerStr);
break;
}
sleep(1);
}
}
int connect_server(GtkButton *button, gpointer user_data) {
.......
if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selectedServer), &model, &iter)) {
path = gtk_tree_model_get_path(model, &iter);
serverIndex = *gtk_tree_path_get_indices(path);
g_print("Selected Server IP: %s\n", serverIPArray[serverIndex][0]);
gtk_widget_set_sensitive(serverList, FALSE); // These 2 lines needs to be run first
append_to_log("Attemping connection, please wait...", 1);
wait_for_connection(); // This is where the error lies, this runs before the above 2 lines
return 1;
} else {
gtk_widget_set_name(serverBox, "fieldsError");
g_print("No server selected: Aborting...\n");
return -1;
}
}
gtk_widget_set_sensitive() 行用于禁用选择小部件的用户交互,但这似乎直到wait_for_connection() 函数完成打印“检查服务器...”10 次后才会发生。 connected 的值为 0,所以目前该函数只打印“正在检查服务器...”10 次。
有人知道会发生什么吗?任何帮助将不胜感激,谢谢。
【问题讨论】:
-
假设没有线程,代码正在按顺序执行。 (即使有线程,每个线程也按顺序执行。)
-
您如何检测到
wait_for_connection调用发生在“以上两行”之前?通过检查输出?通过在调试器中单步执行您的代码?如果您检查输出,并且输出被写入stdout(使用例如printf),请记住默认情况下它是 line buffered 并且在缓冲区已满或你打印一个换行符。因此,要么使用调试器查看 真正 发生了什么,要么在输出中添加一些尾随换行符。 -
@Someprogrammerdude 因此,
gtk_widget_set_sensitive()行用于禁用 GUI 中的小部件,直到wait_for_connection()函数完成打印后才会发生这种情况,它是 10 "Checking server..."行,然后显然g_print语句出现在其后 -
关于:
if (connected == 1)connected设置在哪里? -
@user3629249
connected设置在文件的开头,设置为值 1 仅用于测试
标签: c compiler-errors gtk execution