Novator
py.user.next, а по твоему, надо писать батник типа:
Не, я написал эту программу, которая тебе нужна, у себя в голове от и до и увидел, что она такая сложная, что ты даже приблизительно не поймёшь, как её сделать. А за тебя я её писать не буду, мне-то она нафиг не нужна. Мне есть что писать. У меня этих программ десятки и я их все пишу дальше, поднимая версии.
Вчера вот скрипт написал, который разделяет браузеры в операционной системе. Один браузер под WhatsApp на компе выделил, а другим браузером пользуюсь постоянно для инета. Так вот эти браузеры через шину общаются. Если один открыт, то когда другой запускаешь, он через шину понимает, что другой браузер открыт и посылает ему сообщение “открой окно у себя”, а сам не запускается. А браузеры вообще разные. У одного одни расширения стоят, у другого другие расширения стоят. Один можно обновлять, другой нельзя обновлять. У одного настройка загрузок такая, у другого настройка загрузок другая. Там всё разделено. А они вот общаются через шину, потому что разработчики думали, что браузер может быть один в системе и только для просмотра Интернета. Пришлось это всё разделять самому.
Вот такой скрипт получился у меня
[guest@localhost ~]$ cat /usr/local/bin/ffrunner.sh
#!/bin/bash
# This script runs Firefox
progname=`basename $0`
# Print an error message to stderr
# error(str)
error()
{
echo "error: $progname: $1" >&2
}
# Print a message to stdout
# msg(str)
msg()
{
echo "$progname: $1"
}
# Print program usage to stderr
# usage()
usage()
{
{
echo -n "usage: $progname "
echo -n "{ run | runurl } "
echo -n "configfile "
echo -n "[ url ]"
echo
} >&2
}
configfile_get_watch_path()
{
local config_file=$1
local text
text=$(cat "$config_file")
echo -n "$text"
}
run_check_config()
{
local config_file=$1
local watch_path
watch_path=$(configfile_get_watch_path "$config_file")
if [ -e "$watch_path" ]; then
msg "Watch path found: $watch_path"
firefox --new-instance
else
msg "Watch path not found: $watch_path"
firefox
fi
}
run_check_config_url()
{
local config_file=$1
local url=$2
local watch_path
watch_path=$(configfile_get_watch_path "$config_file")
if [ -e "$watch_path" ]; then
msg "Watch path found: $watch_path"
firefox --new-instance "$url"
else
msg "Watch path not found: $watch_path"
firefox "$url"
fi
}
main()
{
local command
local config_file
local url
case $# in
0|1)
usage
return 1
;;
2)
command=$1
config_file=$2
[ "$command" = "run" ] && \
run_check_config "$config_file" && \
return 0
return 1
;;
3)
command=$1
config_file=$2
url=$3
[ "$command" = "runurl" ] && \
run_check_config_url "$config_file" "$url" && \
return 0
return 1
;;
*)
error "unknown arglist: "$*""
return 1
;;
esac
}
main "$@" || exit 1
exit 0
[guest@localhost ~]$
Потом к ярлыкам браузера в графической оболочке операционной системы он прикрепляется как команда.
Вот это простенький скрипт, писал я его минут пятнадцать. Это не первый скрипт, который я пишу, поэтому у меня со старых и последних моих скриптов сохранился шаблон и я его просто заполнил и дополнил парой функций. А ты его поймёшь? Как он организован вообще? В чём ключевой алгоритм заключается?
А в системе потом просто запускаешь его
[guest@localhost ~]$ ffrunner.sh
usage: ffrunner.sh { run | runurl } configfile [ url ]
[guest@localhost ~]$
И он говорит “запускай меня вот так вот”.
Всё, проблема решена. Теперь эти браузеры разделены у меня. Браузер, в котором WhatsApp открывается, накапливает свою информацию. Браузер, в котором я в Интернете сижу, накапливает свою информацию. И они не пересекаются никак. Этот скрипт их так разделяет, что через шину может общаться только тот браузер сам с собой, через который я в Интернете сижу.
Так что программисту всегда есть что писать. Я себе написал, у меня теперь всё работает. Я ни у кого не ходил и не спрашивал “а дайте мне вот какую-то хуйню, чтобы у меня всё работало”. Я просто взял и написал себе сам.
Novator
надо писать батник типа
Батник? А что это? А, это такая фигня в виндоус, которая из доса пришла. Дорогуша, я в винудоус был, может, месяцев восемь назад. У меня эта система стоит только для игр каких-то там, которые в Linux'е не запускаются. Я ею уже давно не пользуюсь, лет десять.
Так что вердикт вот такой: без многопоточности она у тебя будет висеть в блокировке и ты не сможешь получать эти фрагменты вовремя, а чтобы многопоточным сделать приложение на Qt, надо перелопатить кучу материала, потому что многопоточность в Qt делается через жопу. Я разобрался в своё время с этой хуйнёй и сделал себе многопоточный сканер спокойно. Теперь он фурычит, теперь ничего не висит, все кнопки нажимаются в любое время (раньше её нажимаешь и она нажатой висит, пока не завершится подпроцесс, который там хрен знает сколько работает). Но пришлось мне для этого изучить дохера всего. Ты не изучил от этого даже одной крупицы. Это всё видно, как на ладони, по твоему коду, который ты выложил. Поэтому я тебе и говорю, что ты не вывезешь, будешь у нас тут спрашивать “а как мне делать дальше?”. И так у меня возникает вопрос “а нужно ли мне этому гаврику, который нихера не знает, писать ещё программу эту всю, разжёвывать ему и в ротик класть каждую строчку, как птенчику этому желторотому тупому, который может только ротик открывать и ждать червячка?”. Конечно же, мне это не улыбается. Я лучше время на что-нибудь другое потрачу, у меня хватает дел.