2012-01-22 2 views
8

Я создал небольшой графический интерфейс для управления данными, и недавно я решил переместить базу данных на сервер MySQL. Я создал программу Java для вывода данных вперед и назад, и я начал замечать задержку при доступе к серверам за границей.Как узнать, занят ли Matlab при использовании GUI?

При запуске скриптов через командное окно Matlab отображает «занятый» текст в левом нижнем углу, но не когда я запускаю графические интерфейсы.

Итак, как узнать, занят ли Matlab при использовании графических интерфейсов?

Заранее благодарен.

Редактировать: быстрый пример.

Я бегу в окне командной строки (или test.m скрипт)

for i = 1:100000 
    a = i+i; 
    disp(a); 
end 

Строка состояния говорит: "Занято".

Когда я создаю GUI, с кнопкой «Click me», которая выполняет тот же самый точный скрипт. Значок занятости в строке состояния не отображается.

Почему это и что я могу с этим поделать? Я хочу, чтобы узнать, занят ли мой графический интерфейс или нет.

+0

Вместо того, чтобы полагаться на знак занятости в основной среде IDE, вы не могли бы реализовать какой-либо экран ожидания или распечатать собственное сообщение о ходе выполнения в командной строке. Обе эти идеи обсуждаются здесь (http://blogs.mathworks.com/loren/2007/08/01/monitoring-progress-of-a-calculation/). – Chris

ответ

3

Вы должны иметь возможность изменить сообщение в строке состояния основного окна MATLAB с помощью представления statusbar от Yair Altman на MathWorks File Exchange. Он обсуждает, как это работает в a post on his blog "Undocumented Matlab".

С помощью этой утилиты вы можете установить сообщение «Занят ...», даже если MATLAB не делает это автоматически. Ваш код «Click Me» кнопка обратного вызова вероятно, будет выглядеть примерно так:

... 
statusbar(0, 'Busy...'); %# Set the status message 
test;      %# Run your function/script 
statusbar(0, '');   %# Clear the status message 
... 
+0

Да, это отличный инструмент, но когда я сказал, что создал небольшой графический интерфейс, я соврал. Для меня, новичок, это довольно большой графический интерфейс и добавление этого ко всем моим обратным вызовам (это необходимо) - это большая проблема. Он исправляет проблему, которую я имел, но не является тем решением, на которое я надеялся. Я считаю, что эта проблема решена. Спасибо за ваш вклад. –

4

Он говорит это в строке состояния главного окна!

EDIT:
Итак, ответ отрицательный, прямо сейчас нет способа (легко) сказать, что если Matlab занят чем-то другим, кроме задания командной строки.

+0

Да, но не для графических интерфейсов. –

+0

Возможно, это зависит от версии, но зачем вам это нужно знать, я имею в виду, что я понимаю, что это было бы очень хорошо, но что-то вроде дисфункции? – Ali

+0

Нет, я просто хотел спросить, был ли простой способ подключиться к этому сообщению «Занят» в главном окне. Требуется несколько секунд, чтобы получить «большие» объемы данных, матрицы 10.000x10, когда сервер не находится у вас на пороге. Это сделает GUI более удобным для пользователя. Графический интерфейс игнорирует команды, когда он занят, поэтому это совсем не так. Спасибо за ваш ответ. –

2

Вы можете добавить статический текст на самом графическом интерфейсе и установите его текст «Занято»/«Idle» до/после вашего расчеты сделаны, если сделать GUI более удобным для пользователя является проблемой.

2

Возможно, что вы ищете:

Введите любой arbritary код в командной строке.

например. Somthing как

asdfasdfasdfasdf

Если подпрограмма GUI все еще работает, то он будет отображаться занят, пока функция Gui не закончилась. Только тогда он может начать выполнение asdfasdfasdfasdf.

Если Gui уже завершен, он мгновенно выполнит asdfasdfasdfasdf и отобразит соответствующее сообщение об ошибке.

Раньше все Matlabs отображали также занятое сообщение, когда выполняли функцию запуска Gui. С 2012 года это, похоже, уже не так.

0

Добавить статическое текстовое поле в ваш графический интерфейс. В вашем рассчитайте значок обратного вызова, написать это:

set(handle.text,'string','busy') 
pause(0.1) 
. 
. 
. 
// Your code 
. 
. 
. 
pause(0.1) 
set(handle.text,'string','done') 
0

This thread над на MathWorks говорит, что это может быть сделано с помощью File Exchange entry CmdWinTool. Если вы загрузите этот файл, вы можете использовать его, чтобы узнать, занят ли MATLAB CmdWinTool('isBusy'). Обратите внимание, что CmdWinTool использует недокументированные функции в использовании MATLAB Java, поэтому MathWorks вряд ли его поддержит.

Смежные вопросы