Gtk2hs проблема с потоками
От: Аноним  
Дата: 03.06.08 06:08
Оценка:
Таки разработчики решили эту проблему?
Re: Gtk2hs проблема с потоками
От: vshabanov http://vshabanov-ru.blogspot.com
Дата: 03.06.08 09:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Таки разработчики решили эту проблему?


А была какая-то проблема? Что-то не заметил.

Сам gtk не позволяет работать более чем из одного потока. Так что gtk2hs тут ничем не поможет. Работа с GUI должна вестись в одной нити (и, если ничего не путаю, создавать виджеты можно в любой нити, добавлять/показывать только в основной).

unsafeInitGUIForThreadedRTS и, возможно, forkOS или runInBoundThread для GUI.
Re[2]: Gtk2hs проблема с потоками
От: Аноним  
Дата: 03.06.08 12:38
Оценка:
V>А была какая-то проблема? Что-то не заметил.

Ну как? Запуск mainGUI вызывал остановку работы всех легковесных потоков. Теперь это не происходит?
Re[3]: Gtk2hs проблема с потоками
От: vshabanov http://vshabanov-ru.blogspot.com
Дата: 03.06.08 15:14
Оценка:
Здравствуйте, Аноним, Вы писали:

V>>А была какая-то проблема? Что-то не заметил.


А>Ну как? Запуск mainGUI вызывал остановку работы всех легковесных потоков. Теперь это не происходит?


Вроде и раньше не происходило. Попробуй forkOS mainGUI (а лучше forkOS всей ф-ии, которая занимается gui). У тебя какая версия ghc/gtk2hs и какая платформа? Под виндой помнится надо было для некоторых потоков (занимающихся I/O) делать forkOS (возможно, было бы достаточно только forkOS mainGUI, не проверял). Еще стоит скомпилить с опцией -threaded.
Re[4]: Gtk2hs проблема с потоками
От: Аноним  
Дата: 03.06.08 16:04
Оценка:
То есть, если я сделаю forkOS mainGUI, то я могу спокойно создавать легковесные потоки, которые не будут блокироваться mainGUI, однако доступ к GUI у меня будет только из потока где работает mainGUI?

Тогда такой вопрос: можно ли зарегистрировать в Gtk обработчик некого сигнала, который будет вызываться если я из другой нити буду посылать соответствующее сообщение, а уже обработчик некого сигнала в ните mainGUI, на основе полученной из сообщения информации будет модифицировать GUI?
Re[5]: Gtk2hs проблема с потоками
От: vshabanov http://vshabanov-ru.blogspot.com
Дата: 03.06.08 20:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>То есть, если я сделаю forkOS mainGUI, то я могу спокойно создавать легковесные потоки, которые не будут блокироваться mainGUI, однако доступ к GUI у меня будет только из потока где работает mainGUI?


А>Тогда такой вопрос: можно ли зарегистрировать в Gtk обработчик некого сигнала, который будет вызываться если я из другой нити буду посылать соответствующее сообщение, а уже обработчик некого сигнала в ните mainGUI, на основе полученной из сообщения информации будет модифицировать GUI?


Фиг знает. У нас товарищ просто таймер повесил, который опрашивает канал от другого потока. Не очень красиво, но работает. Скорее всего в GTK такая фича есть, но сильно не искал.
Re[6]: Gtk2hs проблема с потоками
От: Аноним  
Дата: 03.06.08 22:43
Оценка:
Сейчас присматриваюсь к сигналу idle (или как он там?), который, обещают, будет дергаться когда ни чего не происходит + канал.
Re[5]: Gtk2hs проблема с потоками
От: BulatZiganshin  
Дата: 05.06.08 19:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>То есть, если я сделаю forkOS mainGUI, то я могу спокойно создавать легковесные потоки, которые не будут блокироваться mainGUI, однако доступ к GUI у меня будет только из потока где работает mainGUI?


А>Тогда такой вопрос: можно ли зарегистрировать в Gtk обработчик некого сигнала, который будет вызываться если я из другой нити буду посылать соответствующее сообщение, а уже обработчик некого сигнала в ните mainGUI, на основе полученной из сообщения информации будет модифицировать GUI?


1. см. подпись — проблем нет, можешь почитать исходники. -threaded, потоки создаю и с forkIO, и с forkOS — всё работает

2. в сам gtk2hs встроен готовый механизм посылки заданий gui thread — postGUISync / postGUIAsync. у меня например есть треды запускаемые по forkIO, отрабатывающие vbackground-задания, они используют эти вызовы для управления GUI
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Gtk2hs проблема с потоками
От: Аноним  
Дата: 06.06.08 18:46
Оценка:
Я бегло посмотрел на исходники FreeArc, я так понял, что часть программы написана на Haskell, а часть на C. Чем обусловлен такой выбор? Почему не написать все на одном языке?
Re[7]: Gtk2hs проблема с потоками
От: geniepro http://geniepro.livejournal.com/
Дата: 07.06.08 06:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я бегло посмотрел на исходники FreeArc, я так понял, что часть программы написана на Haskell, а часть на C. Чем обусловлен такой выбор? Почему не написать все на одном языке?


На Хаскелле проще написать сложную логику анализа входных файлов и выбора наиболее подходящих алгоритмов компрессии. Булат упоминал, что на Си/С++ такую логику он в разумные сроки просто не осили бы...

В свою очередь, переписывать готовые сторонние/стандартные алгоритмы компрессиии с Си/С++ на Хаскелл у Булата времени и нужды просто нет -- раз работают, так чего их трогать?
Re[8]: Gtk2hs проблема с потоками
От: BulatZiganshin  
Дата: 07.06.08 15:00
Оценка:
Здравствуйте, geniepro, Вы писали:

G>На Хаскелле проще написать сложную логику анализа входных файлов и выбора наиболее подходящих алгоритмов компрессии. Булат упоминал, что на Си/С++ такую логику он в разумные сроки просто не осили бы...


G>В свою очередь, переписывать готовые сторонние/стандартные алгоритмы компрессиии с Си/С++ на Хаскелл у Булата времени и нужды просто нет -- раз работают, так чего их трогать?


всё верно. плюс ещё низкая скорость хаскела

а gui часть я вообще предпочёл бы написать на .net, и возможно так и сделаю — при использовании простых типов данных импеданс между разными языками минимальный. заодно выйдет отличный пример грамотного испольщзования преимуществ каждой технологии — скорость c++, высокоуровневость хаскела, богатый инструментарий .net
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Gtk2hs проблема с потоками
От: Аноним  
Дата: 07.06.08 15:47
Оценка:
BZ>плюс ещё низкая скорость хаскела

Интересно, а если переписать все на Haskell, во сколько раз уменьшится скорость?
Re[9]: Gtk2hs проблема с потоками
От: geniepro http://geniepro.livejournal.com/
Дата: 08.06.08 07:38
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ> а gui часть я вообще предпочёл бы написать на .net, и возможно так и сделаю


О, а можно поподробнее? Насколько я знаю, нет прямого биндинга к .NET (ну кроме HUGS98.NET, но это не очень серьёзно)...
Как Вы планируете это сделать? Интерфейс на С# (вариант -- F#/Nemerle), который вызывает dll-ку на Хаскелле? Или наоборот, основная прога на Хаскелле, вызывающая dll-ку .NET-а?
Или как-то ещё?
Re[10]: Gtk2hs проблема с потоками
От: BulatZiganshin  
Дата: 08.06.08 22:57
Оценка:
Здравствуйте, Аноним, Вы писали:

BZ>>плюс ещё низкая скорость хаскела


А>Интересно, а если переписать все на Haskell, во сколько раз уменьшится скорость?


если тебя интересует скорость хаскела (точнее, ghc), рекомендую:

An approach to fast arrays in Haskell [http://www.cse.unsw.edu.au/~chak/papers/afp-arrays.ps.gz]
Rewriting Haskell Strings [http://www.cse.unsw.edu.au/~dons/papers/fusion.pdf]
Люди, я люблю вас! Будьте бдительны!!!
Re[10]: Gtk2hs проблема с потоками
От: BulatZiganshin  
Дата: 08.06.08 23:05
Оценка:
Здравствуйте, geniepro, Вы писали:

BZ>> а gui часть я вообще предпочёл бы написать на .net, и возможно так и сделаю

G>Как Вы планируете это сделать? Интерфейс на С# (вариант -- F#/Nemerle), который вызывает dll-ку на Хаскелле? Или наоборот, основная прога на Хаскелле, вызывающая dll-ку .NET-а?

я собираюсь положить свой код в freearc.dll с сишным интерфейсом, которую можно будет использовать из любой архиваторной оболочки

собственно, главным опытом от реализации нынешнего GUI стало осознание того, что весь интрефейс между графической и архиваторной частью можно уложить в 10-20 процедур с простыми типами параметров, не сложнее строк

аналогочно этому, и интерфейс между архиватором и алгоритмами сжатия уложен в 20-30 вызовов и поэтому хаскел легко сопрягается с C++

кстати, если кому нужно — есть hsffig, автоматический генератор биндингов к чистом сишным (не C++) библиотекам. я не пробовал, но так понимаю, что с ним любая бибилиотека с чисто сишным интейесом может использоваться так же легко как родная (за исключением того, что сам интерфейс у сишной библиотеки по необходимости низкоуровневый, например никаких исключений — только коды разврата)
Люди, я люблю вас! Будьте бдительны!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.