Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под *nix > Общие вопросы программирования
Перезагрузить страницу Принципы оконного интерфейса
Ответ
 
Опции темы Опции просмотра
  (#61 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию 06.12.2007, 10:44

Цитата:
PID - это process identifier, а не thread identifier. В POSIX все потоки (threads), принадлежащие одному процессу (process), имеют один и тот же PID. Функция kill (в отличие от pthread_kill) посылает сигнал именно процессу, а обработать его может любой из потоков.

В старых версиях Linux это было не так, но в NPTL все исправили.
При компиляции с использованием "GCC: (GNU) 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)"
вот такого кода:
Код:
 
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <signal.h>
#include <sys/types.h>

void * print_xs(void *);


 int main(int argc,char * argv[])
{
 int i; 

 pthread_t thread_id;

 fprintf(stderr,"\nparent pid :> %d",(int)getpid());
 pthread_create(&thread_id,NULL,print_xs,NULL);
 pthread_create(&thread_id,NULL,print_xs,NULL);
 pthread_create(&thread_id,NULL,print_xs,NULL);
 
 for(i = 0;i < 2000;i++){
    sleep(1);
    write(1,"o",1);
 }
 printf("\n Done\n");
 return 0;
}


 void *  print_xs(void * unused)
{
 int i; 
 fprintf(stderr,"\nthread pid :> %d",(int)getpid());
 for( i = 0;i < 2000;i++ ) {
    sleep(1);
    write(1,"x",1);
}
 return NULL;
}
После запуска программы в каталоге /proc создается каталог с номером PID запустившегося процесса в этом каталоге есть каталог task а внем можно посмотреть номера потоков. У меня создалось 4 потока с разными номерами.
Это происходит потому, что поток разделяет общею память но не общее время доступа к процессору, а планировщик ядра linux предоставляет процессорное время только по PID. Соответствено у каждого потоку должен быть свой PID.
В POSIX да, а вот в Linux отошли от этого и сделали немного по другому.
Ответить с цитированием
  (#62 (permalink)) Старый
Alexey Dejneka Alexey Dejneka вне форума
Member
 
Сообщений: 451
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2004
По умолчанию 06.12.2007, 21:45

Спасибо, я вижу, что PID-ы действительно сохранились (под именем TID-ов?), и kill(1) (и, похоже, kill(2)) действительно принимает любой из TID-ов, принадлежащих процессу. Однако, быстрый эксперимент показал, что сигнал все равно посылается всему процессу (хотя поток с указанным в аргументе kill номером, похоже, имеет приоритет): если указанный поток заблокировал прием сигнала, вызывается обработчик в другом потоке.
Ответить с цитированием
  (#63 (permalink)) Старый
Arachnelis Arachnelis вне форума
Member
 
Сообщений: 1,324
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.07.2007
Unhappy 08.12.2007, 22:12

А мои вопросы все игнорируют?

Цитата:
У любой UI-библиотеки может выделить два важнейших параметра - быстрота проектирования UI с ее использованием и быстродействие.
...
Вопросы насчет QT и wxWidjets:
1. Какая из них в бОльшей степени соответствует одновременно обоим этим критериям?
...
2. Какой идеологии в принципе следует та и другая?
Ответить с цитированием
  (#64 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 09.12.2007, 08:47

Цитата:
А мои вопросы все игнорируют?
Возможно никто не знает ответ. Люди, работающие с *nix в большинстве привыкли понимать суть, и вряд ли кто из них станет что-то доказывать без понимания предмета
Ответить с цитированием
  (#65 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию 10.12.2007, 09:03

Цитата:
У любой UI-библиотеки может выделить два важнейших параметра - быстрота проектирования UI с ее использованием и быстродействие. Обычно эти параметры являются взаимоисключающими. Но теоретически библиотеку можно наполнить широким спектром возможностей - используешь одни классы - быстро пишешь, используешь другие - получаешь доступ к ОС почти напрямую, и, как следствие, скорость.

Вопросы насчет QT и wxWidjets:

1. Какая из них в бОльшей степени соответствует одновременно обоим этим критериям?
Т.е. в какой из них присутствует как раз широкий набор классов на выбор?

2. Какой идеологии в принципе следует та и другая?
Наверное ты имел ввиду не проектирование, а создание. Поскольку проектирование системы сводится к написанию алгоритма, с использованием диаграм.
А насчет создания программ с использованием GUI-библиотек, все зависит от опыта, знания API библиотеки, хорошо задокументированного алгоритма.
А вот начет быстродействия , за wxWidjets не скажу не использовал, а вот Qt в силу того, что имеет встроенный механизм слежение за выделением и высвобождением памяти (что очень удобно ) под едает хороший кусок памяти.
Тоесть если сравнивать язык java в котором механизмы слежения за выделением и высвобождением памяти встроены в сам язык, то используя язык C++ и библиотеку Qt мы достигаем того же результата, но и имея гибкость C++.
И конечно GUI интерфейс всегда занимал много ресурсов компа.
Ответить с цитированием
Ads.
  (#66 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 10.12.2007, 09:22

Цитата:
И конечно GUI интерфейс всегда занимал много ресурсов компа.
Действительно много - с появлением Aero

Я бы сказал, что проектирование UI сводится к выбору и размещению контролов. При графическом дизайнере это почти неотделимо от создания
Ответить с цитированием
  (#67 (permalink)) Старый
Arachnelis Arachnelis вне форума
Member
 
Сообщений: 1,324
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.07.2007
Lightbulb 10.12.2007, 20:46

Цитата:
Наверное ты имел ввиду не проектирование, а создание. Поскольку проектирование системы сводится к написанию алгоритма, с использованием диаграм.
По-моему, вы не так меня поняли. Я говорю о построении интерфейса пользователя для приложения. Я занимаюсь этим профессионально, это моя работа. Диаграмм никаких мне строить не приходится, и не могу представить, чтобы начальство меня к этому принудило - работа психолога основана на профессиональной интуиции. Я могу сходу сказать "надо так", а если начинают спрашивать "почему", мне иногда по две недели приходится формулировать членоразборное обоснование.

Пардон за оффтоп, вернуть к вопросу. До сих пор я работал лишь с Windows, о Linux понятия не имею. Однако для работы мне необходимо не просто "нарисовать кнопочки" - надо знать структуру программного интерфейса между ядром приложения и пользовательским интерфейсом, проще говоря то, что в миру известно под названием "GUI-функции ОС".

Именно в этом и состояла формулировка головного вопроса топика.

Часто приходится иметь дело с задачами построения UI при условии его быстрого функционирования. Под Windows в таких случаях используется прямое обращение к WinAPI. Сейчас я пытаюсь обобщить свою работу на все платформы, ибо подобные вопросы потихоньку начинают шевелиться "в верхах" фирмы.

Поэтому для меня чрезвычайно важно, чтобы UI-библиотека ПОЗВОЛЯЛА писать высокоскоростной UI, пусть в ущерб простоте кода и быстроте процесса создания. Еще раз - мне не приходится отделять проектирование UI от непосредственно его создания (отвечая Dian'у - в независимости от того, использую ли я граф.дизайнер или пишу ручками под WinAPI). Аналогия - вспомните ужас, когда в школе/ВУЗе заставляли сначала нарисовать блок-схему, а потом написать по ней программу...
Ответить с цитированием
  (#68 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 11.12.2007, 11:01

Как правило, чем ниже уровень, тем быстрее работает (чем выше уровень, тем быстрее разработка). Описанный Yaroslavом механизм контроля памяти относится к тормозам.
На практике, как правило, основные тормоза возникают совсем не от пользовательского интерфейса (какие там вообще могут быть длительные операции?).

На счет рисования до разработки - и сейчас используется, рисуются преимущественно диаграммы классов
Ответить с цитированием
  (#69 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию 11.12.2007, 12:41

Цитата:
По-моему, вы не так меня поняли. Я говорю о построении интерфейса пользователя для приложения. Я занимаюсь этим профессионально, это моя работа. Диаграмм никаких мне строить не приходится, и не могу представить, чтобы начальство меня к этому принудило - работа психолога основана на профессиональной интуиции. Я могу сходу сказать "надо так", а если начинают спрашивать "почему", мне иногда по две недели приходится формулировать членоразборное обоснование.
Насчет рисования диаграмм, зря очень удобный механизм создания программ.
Если программа не большая и работает над ней один человек (особено если создается в builder), то костяк у нее это как раз GUI. Хорошо это или плохо, незнаю но так делают в основном. А если над программой работают несколько человек и еше требование чтоб GUI был различеный (Win, linux,web) тогда логика всегда идет отдельно, а GUI отдельно.

Цитата:
Пардон за оффтоп, вернуть к вопросу. До сих пор я работал лишь с Windows, о Linux понятия не имею. Однако для работы мне необходимо не просто "нарисовать кнопочки" - надо знать структуру программного интерфейса между ядром приложения и пользовательским интерфейсом, проще говоря то, что в миру известно под названием "GUI-функции ОС".

Именно в этом и состояла формулировка головного вопроса топика.

Часто приходится иметь дело с задачами построения UI при условии его быстрого функционирования. Под Windows в таких случаях используется прямое обращение к WinAPI. Сейчас я пытаюсь обобщить свою работу на все платформы, ибо подобные вопросы потихоньку начинают шевелиться "в верхах" фирмы.
Поэтому для меня чрезвычайно важно, чтобы UI-библиотека ПОЗВОЛЯЛА писать высокоскоростной UI, пусть в ущерб простоте кода и быстроте процесса создания.
Ну если конкретно насчет linux то в linux нет функций GUI - ядра, есть функции рисования примитивов с использованием ядра (в частности framebuffer).
А вот уже GUI функции реализованы c использованием различных библиотек ну самая близкая к ядру xlib все остальный стараются работать через нее.
И то xlib тоже вроде работает через примитивы (могу ошибаться так как не использовал, в linux создано большое колличество библиотек за всеми не уследиш).
В принципе можно создать свои GUI-функции используя framebuff, а после на их базе создавать приложения. Скорость будет ого.


Цитата:
Как правило, чем ниже уровень, тем быстрее работает (чем выше уровень, тем быстрее разработка). Описанный Yaroslavом механизм контроля памяти относится к тормозам.
На практике, как правило, основные тормоза возникают совсем не от пользовательского интерфейса (какие там вообще могут быть длительные операции?).

На счет рисования до разработки - и сейчас используется, рисуются преимущественно диаграммы классов
Полностью согласен, зато удобные тормоза, при написании кода не тратиш на это время. чем то приходится жертвовать.
Ответить с цитированием
  (#70 (permalink)) Старый
Arachnelis Arachnelis вне форума
Member
 
Сообщений: 1,324
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.07.2007
Post 11.12.2007, 13:20

Цитата:
На счет рисования до разработки - и сейчас используется, рисуются преимущественно диаграммы классов
Цитата:
Насчет рисования диаграмм, зря очень удобный механизм создания программ.
Очень хорошо, а ссылочку для старта не пожертвуете? Диаграммы разные бывают, сам по поиску во век не найду.
Ответить с цитированием
  (#71 (permalink)) Старый
Yaroslav Yaroslav вне форума
Member
 
Сообщений: 166
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2004
По умолчанию 11.12.2007, 13:30

Цитата:
Очень хорошо, а ссылочку для старта не пожертвуете? Диаграммы разные бывают, сам по поиску во век не найду.
Диаграммы или блок-схемы рисуются с использования программ visio, dia .
Ответить с цитированием
  (#72 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 11.12.2007, 15:04

Цитата:
Originally posted by Yaroslav+-->
Цитата:
Насчет рисования диаграмм, зря очень удобный механизм создания программ.
Там говорилось о работе психолога-дизайнера, а не системного архитектора. Первому до диаграмм дела может и не быть...

Цитата:
Originally posted by Yaroslav@
[b]Полностью согласен, зато удобные тормоза, при написании кода не тратиш на это время. чем то приходится жертвовать.
Идеальным вариантом была бы возможность отключать это в релизной версии - и удобство в дебаге будет, и скорость работы в итоге.

<!--QuoteBegin-Arachnelis

[b]Очень хорошо, а ссылочку для старта не пожертвуете? Диаграммы разные бывают, сам по поиску во век не найду.
Сейчас, пожалуй, самая популярная нотация - UML. На эту тему лучше всего читать Буча
[Гради Буч "Объектно-ориентированный анализ и проектирование"]
Во-первых, описано само ООП. Не на уровне "объект=код+данные", а так, как оно есть... Во-вторых, сами диаграммы описаны с точки зрения "зачем", а не на уровне тупого описания элементов диаграмм

P.S. Идею блок-схем я не очень поддерживаю - действительно нужны они бывают крайне редко
Ответить с цитированием
Ads
  (#73 (permalink)) Старый
Arachnelis Arachnelis вне форума
Member
 
Сообщений: 1,324
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.07.2007
Arrow 11.12.2007, 15:41

Ух, я уж испугался, думал чего где пропустил...

Перерыл литературу, ГОСТы, расспросил двоих специалистов по эргономике и юзабилити, поискал на соответствующих сайтах.
Ничего даже отдаленно связанного с понятием "проектировочные диаграммы" и даже "графы" нет в помине.

Есть план организации (схема, структура) рабочего пространства. Есть общая схема проекта, в которой отдельными блоками указаны те или иные элементы интерфейса пользователя. Есть блок-схема последовательности действий пользователя по управлению программой.

Но ничего из упомянутого не имеет ничего общего с диаграммами. Не надо путать это слово с блок-схемами!
Диаграммы выражают связь между значениями разных величин в графической форме.
Ума не приложу, как это могло бы пригодиться хоть проектировщику UI, хоть архитектору всего проекта...
Ответить с цитированием
  (#74 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 11.12.2007, 19:04

Цитата:
Диаграммы выражают связь между значениями разных величин в графической форме
Какое-то очень узкое представление, так еще можно сказать про графики... UML понимает диаграммы по другому, по крайней мере со значениями величин не оперирует в принципе
Ответить с цитированием
  (#75 (permalink)) Старый
Arachnelis Arachnelis вне форума
Member
 
Сообщений: 1,324
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.07.2007
Thumbs up 11.12.2007, 21:05

Цитата:
На практике, как правило, основные тормоза возникают совсем не от пользовательского интерфейса (какие там вообще могут быть длительные операции?).
Слово "интерактивный" когда-нибудь слышали? В Quake играли? Не надо думать, что интерфейс может быть только пошаговым. В динамических системах удобное управление тоже надо проектировать. Представьте, что вы управляете самолетом с четырьмя штурвалами - по одному на каждый закрылок...

Цитата:
Какое-то очень узкое представление, так еще можно сказать про графики... UML понимает диаграммы по другому, по крайней мере со значениями величин не оперирует в принципе
С UML я не знаком, что там понимается под диаграммами не знаю, но вот что говорит Wikipedia:
Diagram - символическое представление информации.
Structure - принципиальное представление отношений между сущностями.
Перевожу. Информация, представленная в виде диаграмм может нести лишь повествовательный характер, т.е. с их помощью можно что-либо описать, например это может быть руководство к продукту. Допустим, в процессе проектирования чего-либо могут производиться какие-то расчеты, и иногда может быть полезно увидеть информацию в наглядном виде - тогда строятся диаграммы. Это как бы обратная связь, чтобы разработчик увидел промежуточный плод своей работы. Но непосредственно к самому проектированию они отношения не имеют, для этого используются структурные схемы, блок-схемы.

И графики от диаграмм никогда не отделялись, это почти одно и то же, за исключением того, что график - это непрерывная зависимость, а диаграмма - дискретная.

Ладно, речь не об этом.

Скажите, кто знает, а в wxWidjets тоже автоматический сборщик мусора или нет?
А в QT ВСЕ классы подвязаны к сборщику мусора или это опциональная фича, для части классов?


update:
Для пущей понятности поверну вопрос самым страшным образом:
Как написать переносимый Windows-Linux авиасимулятор или шутер?
Можно ли это хоть примитивно сделать, пусть без многопоточности и прочего, но чтобы работало быстро?
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некоторые принципы по написанию программ, для новичков dect Общие вопросы создания ПО 15 24.09.2011 19:18
Общие принципы организации синтаксического разбора в С++ 45182 Вопросы начинающих программистов 2 09.01.2011 18:41
Программа демонстрирующая принципы ООП (полиморфизм, инкапсуляцию, наследование) TidalAeon Вопросы начинающих программистов 0 11.12.2010 16:32
Принципы управления DVD и CD приводами tumanovalex Железо. Написание драйверов 0 29.08.2008 00:21
Принципы решения написания программы Frullani Lisp 2 27.09.2007 19:23
Принципы форматирования файлов shatush Общетематический 3 29.06.2007 23:16
Создание оконного приложения для Windows с 98 на VS2005 Antsu Visual C++ 5 17.01.2007 10:34
Объясните общие принципы работы CAsyncSocket Palmman Сетевое программирование 2 02.10.2006 20:28
Принципы создания средствами VC++ 6.0 интерфейса типа "проводник" Postum Visual C++ 8 26.01.2005 18:10
Принципы написания трояна Anonymous Delphi 30 19.03.2004 16:37
Принципы DoS-атак как их создавать Felix Delphi 2 11.01.2004 06:27
Принципы работы менеджера виртуальных экранов lv Visual C++ 0 01.11.2003 05:24



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов