Столкнулся с одной проблемой, решение которой так и не смог
придумать... Может Вы мне поможете?
Я решил переписать один из своих скриптов используя PHP-GTK, который
до этого выполнялся в командной строке.
Благодаря Вашем статьям по PHP-GTK проблем с ним не возникло - все
написанно понятно и четко. Спасибо Вам огромное!
Но вот проблема подкралась откуда не ждал - скрипту переодически
необходимо входить в долгие циклы (while(1){}), чтобы выполнить то,
для чего он предназначен.. Но вот графический интерфейс при этом
"умирает"... И пока цикл не завершится - Windows определяет окно как
"неотвечающее"...
На ум сразу пришло создать 2 потока, первый бы отвечал за логику, а
второй за GUI, но увы - ничего подходящего под Win для создание тредов
я не нашел.
Возможно ли решить как то эту проблему?
Спасибо!
15 июня 2010 г. 18:55 пользователь Shecspi <she...@gmail.com> написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: sup...@metall-zone.com
Site: www.metall-zone.com
Phone: +998902982884
On 15 июн, 17:57, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> в целом как решение создать новый процесс. и научить процессы
> общаться;) правда не унаследуется из главного процесса ничего.
>
> 15 июня 2010 г. 18:55 пользователь Shecspi <shec...@gmail.com> написал:
>
>
>
>
>
> > К сожалению, каких-либо наработок по многопоточности для Windows я не
> > встречал. На никсах это легко реализуется, а вот вин...
>
> > On 15 июн, 14:33, Alex Shcneider <alex.shcnei...@gmail.com> wrote:
> >> Добрый день!
>
> >> Столкнулся с одной проблемой, решение которой так и не смог
> >> придумать... Может Вы мне поможете?
>
> >> Я решил переписать один из своих скриптов используя PHP-GTK, который
> >> до этого выполнялся в командной строке.
> >> Благодаря Вашем статьям по PHP-GTK проблем с ним не возникло - все
> >> написанно понятно и четко. Спасибо Вам огромное!
> >> Но вот проблема подкралась откуда не ждал - скрипту переодически
> >> необходимо входить в долгие циклы (while(1){}), чтобы выполнить то,
> >> для чего он предназначен.. Но вот графический интерфейс при этом
> >> "умирает"... И пока цикл не завершится - Windows определяет окно как
> >> "неотвечающее"...
>
> >> На ум сразу пришло создать 2 потока, первый бы отвечал за логику, а
> >> второй за GUI, но увы - ничего подходящего под Win для создание тредов
> >> я не нашел.
>
> >> Возможно ли решить как то эту проблему?
> >> Спасибо!
>
> > --
> > Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.
>
> > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
> > Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
> > О дополнительных функциях можно узнать в группе по адресуhttp://groups.google.com/group/php-gtk-ru?hl=ru.
>
> --
> Best regards, GoTLiuM InSPiRiT.
> E-mail: supp...@metall-zone.com
> Site: www.metall-zone.com
> Phone: +998902982884
15 июня 2010 г. 21:53 пользователь Shecspi <she...@gmail.com> написал:
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: got...@gmail.com
Phone: +998902982884
По сути приложение уходит в бесконечный цикл в методе Gtk::main(), как
я понял.
Может существуют какие-либо штатные средства, заставить Gtk::main()
вызывать пользовательскую функцию из своего цикла...
Примерно так:
Gtk::main('my_function');
function my_function() {
// Логика
}
Такое решение позволило бы в одном потоке без зависания GUI к
выполнять основную логику...
Подскажите пожалуйста, есть ли что либо похожее в GTK2 ?
Спасибо!
Спасибо!
--
Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
17 июня 2010 г. 23:05 пользователь NRN <nrn...@gmail.com> написал:
--
Shecspi, жаль. Очень жаль(
NRN, я читал эту, и еще кучу статей по поводу псевдо многопоточности
на PHP.
Но все они не подходят, к сожалению..
Раз не вышло сделать GUI, помогите хотя бы от висящей консоли
избавиться, пожалуйста!
Рассклад таков:
.bat запускает PHP скрипт.
Первые 5-10 секунд скрипт инициализируется и выводит в консоль
состояние инициализации (это необходимо, т.к. вероятность что какое
либо условие будет не так - велика)...
После инициализации скрипт входит в бесконечное прослушивание
локлаьного порта.
А вот окно с консолью висит мертвым грузом (т.к. дальнейшей работой
можно управлять через Telnel или веб интерфейс).
При попытке закрыть консоль, вместе с нею и умирает процесс php.
Подскажите плз, как избавиться от консоли, оставив в памяти активный
процесс php (типа демон ^_^)?
Еще раз, Спасибо!
17 июня 2010 г. 23:30 пользователь Alex Shcneider
<alex.sh...@gmail.com> написал:
Я почти решил проблему, по свойму, пусть не много коряво, но работает
так как мне надо)
GUI (PHP-GTK) и основная логика запускаются отдельными процессами, и
далее общаются между собой (правда GUI не сильно "разговорчив")...
Но с одной "корявостью" я смриться не могу - это постоянно висящая
консоль от запуска "логики" программы...
Закрываешь - падает php... Беда(
On 17 июн, 21:39, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> не выйдет. юзай *nix, либо пиши сервер приложение, которое будет висеть в трэе!
> я делал именно так. так же советую почитать о том как это решает
> apache либо mysql в винде.
> в никасах всё просто(posix). при прослушивании, идёт форк основного процесса.
> как вариант изучи что такое service. есть так же PsExec.
> для простого приложения, можно создать основной процесс, который будет
> создавать новые,
> и ожидать ответа. основное приложение, будет обращаться к нему. такой
> вариант я думал
> использовать во фреймворке. только руки до этого не дойдут.
> либо пиши сам dll или ищи готовое решение.
>
> 17 июня 2010 г. 23:30 пользователь Alex Shcneider
> <alex.shcnei...@gmail.com> написал:
>
>
>
>
>
> > Shecspi, NRN спасибо!
>
> > Shecspi, жаль. Очень жаль(
> > NRN, я читал эту, и еще кучу статей по поводу псевдо многопоточности
> > на PHP.
> > Но все они не подходят, к сожалению..
>
> > Раз не вышло сделать GUI, помогите хотя бы от висящей консоли
> > избавиться, пожалуйста!
> > Рассклад таков:
> > .bat запускает PHP скрипт.
> > Первые 5-10 секунд скрипт инициализируется и выводит в консоль
> > состояние инициализации (это необходимо, т.к. вероятность что какое
> > либо условие будет не так - велика)...
> > После инициализации скрипт входит в бесконечное прослушивание
> > локлаьного порта.
> > А вот окно с консолью висит мертвым грузом (т.к. дальнейшей работой
> > можно управлять через Telnel или веб интерфейс).
> > При попытке закрыть консоль, вместе с нею и умирает процесс php.
>
> > Подскажите плз, как избавиться от консоли, оставив в памяти активный
> > процесс php (типа демон ^_^)?
>
> > Еще раз, Спасибо!
>
> > --
> > Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.
>
> > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
> > Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
> > О дополнительных функциях можно узнать в группе по адресуhttp://groups.google.com/group/php-gtk-ru?hl=ru.
>
> --
> Best regards, GoTLiuM InSPiRiT.
> E-mail: gotl...@gmail.com
> Phone: +998902982884
17 июня 2010 г. 23:52 пользователь Alex Shcneider
<alex.sh...@gmail.com> написал:
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: got...@gmail.com
Phone: +998902982884
$pid = pcntl_fork();
if ($pid == -1) {
exit('Failed!');
} elseif ($pid) {
exit('Parent kill myself!');
} else {
echo "I`am child!";
}
Смысл программы в следующем.
Она по сути является ретранслирующем прокси сервером. После запуска
начинает слушать localhost на определенном порту.
В настройках браузера прокси сервером указывается localhost:port. Так
что все запросы идут к скрипту, который POST`ом отправляет на
серверную часть скрипта, которая находится на виртуальном хостинге.
Та в свою очередь разбирает заголовки, загружает необходимую
страничку, и отдает результат локлаьному скрипту, который
ретранслирует их обратно браузеру.
Я думаю, принцип работы логики ясен.
Теперь что касается связки логики с GUI.
Логика запускается первой, и от нее остается стандартная консоль
windows.
После инициализации логики запускается GUI, написанный на GTK-PHP.
Общаются они через 2 файла.
В первый файл пишет "логика", а GTK читает, и выполняет.
Во второй - наоборот, пишет GTK, читает "логика"...
Вот такой принцип... Если в краце
On 17 июн, 22:00, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> приведи пример программы для начала.
> сложно понять без примера твою реализацию и замысел.
> надеюсь это ты понимаешь и сам.
> после возможно тебе кто-то что-то и предложит, или поправит.
> в php действительно сложно с многопоточностью.
> я вот писал в c# свободно приложения и проблем с этим не было.
> в си всё просто:
> pid = fork();
> switch(pid) {
> case 0:
> chdir("/");
> exit(0);
> case -1:
> printf("Failed");
> break;
> default:
> printf("Success");
> exit(0);
>
> }
>
> 17 июня 2010 г. 23:52 пользователь Alex Shcneider
> <alex.shcnei...@gmail.com> написал:
18 июня 2010 г. 0:16 пользователь Alex Shcneider
<alex.sh...@gmail.com> написал:
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: got...@gmail.com
Phone: +998902982884
On 17 июн, 22:22, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> ну тогда какая проблема?!
> GUI пусть по средству time-аута пишет нужное в файл и забирает из второго.
> ничего сложного нет. консоль закрыть можно по средству php-win.exe,
> через ярлык и трей.
>
> 18 июня 2010 г. 0:16 пользователь Alex Shcneider
> <alex.shcnei...@gmail.com> написал:
18 июня 2010 г. 0:27 пользователь Alex Shcneider
<alex.sh...@gmail.com> написал:
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: got...@gmail.com
Phone: +998902982884
On 17 июн, 22:32, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> повторюсь, не нужно кнопки, нужно просто использовать timeout add.
> так же в группе обсуждалось php-win.exe. так что нужно прочесть на
> данный момент добавление событий и запуск под винОС. направление взял
> верное.
>
> 18 июня 2010 г. 0:27 пользователь Alex Shcneider
> <alex.shcnei...@gmail.com> написал:
> >> >> > О дополнительных...
>
> продолжение >>
18 июня 2010 г. 0:41 пользователь Alex Shcneider
<alex.sh...@gmail.com> написал:
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.
>
>
--
Best regards, GoTLiuM InSPiRiT.
E-mail: got...@gmail.com
Phone: +998902982884
import sys, time, gtk
from threading import Thread
count = 0
class Bg (Thread):
def __init__ (self):
Thread.__init__(self)
def run (self):
global count;
time.sleep(2);
count += 1;
print "pr: ", count
def start(button):
a = Bg()
a.start()
def destroy(*args):
window.hide()
gtk.main_quit()
gtk.gdk.threads_init()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", destroy)
button = gtk.Button("Start")
button.connect("clicked", start)
window.add(button)
button.show()
window.show_all()
gtk.main()
18 июня 2010 г. 2:06 пользователь NRN <nrn...@gmail.com> написал:
18.06.10, GoTLiuM InSPiRiT<got...@gmail.com> написал(а):