Absurd писал(а):Это означает что каждый квант времени отданный твоему треду будет сожран целиком на бесполезную херню, хотя можно было бы его передать более полезному процессу либо поместить ядро в состояние останова.
Нет. Это означает, что по истечении кванта система самостоятельно забирает управление и передаёт другому потоку того же, или другого процесса. И кто сказал, что она бесполезна? Именно вторичный поток делала то, ради чего и была создана вся программа. В первой версии в нём ещё крутился счётчик, а первичный замерял время и вычислял количество повторений в секунду, во второй версии вторичный поток сам опрашивал часы, чтоб притормаживаться слыпом.
Absurd писал(а):Нет вторичных потоков. Есть фоновые (BACKGROUND).
Ну ка попробуйте дать определение такого потока. Это вообще что? Поток, не выводящий на экран ни каких промежуточных результатов и не управляемый в процессе работы? Система не может гарантировать подобного режима. Поток, не выводящий информацию непосредственно, а только посредством другого потока? У меня было на столько всё вывернуто шиворот на выворот, что этим свойством обладал именно первичный поток. А вторичный поток - это поток, запущенный из другого потока своего процесса. Всё просто и понятно и не требуются ни какие гарантии ограничений операционной системы. Кстати, словосочетание "первичный поток" есть у Петзолдта. Если один первичный, то остальные какие? Что то у Вас не вяжется.
Absurd писал(а):Обычно предполагается что когда твой тред получит квант времени он быстро сделает что-то и повиснет на объекте синхронизации или ожидании ввода-вывода.
Согласно правилу, по которому определяется, нужна ли приложению многопоточность, действия, занимающие меньше
1/10 секунды выполняются в первичном потоке, а во вторичные выносится только то, что занимает
больше времени. Читайте Петзолдта. Ради пробы клавы можно вынести во вторичный поток и краткую операцию, но если дальше идёт синхронизация, то получаем недоиспользование процессора, такую операцию эффективней выполнять или прямо в оконной процедуре, или в функции, вызываемой из неё. А вот если действие занимает часа полтора, то в это время должны продолжать получаться и обрабатываться сообщения и только по выполнении всего задания или его части, занимающей хоятыбы секунд 10 по времени, происходит вывод результата, окончательного или промежуточного. Кстати, синхронизацию при доступе к экранному компоненту я использовал только в тестовом приложении и только на болэнде. И ни разу в реальном проекте. Предпочитаю монополизировать вывод одним потоком и такой фигнёй не заниматься. Первичный поток отлично может получить сами данные и по булеву флагу самостоятельно вывести их на экран. Такой флаг достаточно мал для атомарности операций с ним, а непредсказуемых изменений данных после его установки можно ведь и не прописывать. Была у меня и тестилка, где оба потока пытались рисовать. Фигня получилась.
Absurd писал(а):Приоритет это хотелка. ОС имеет право не принимать ее во внимание.
Бред. Приоритет - это задание. Разумеется ОС не даёт всё время только самому приоритетному потоку. Но если бы приоритет игнорился, то его бы просто не было. Но приоритеты есть, поэтому если несколько потоков имеют разные приоритеты, то больше времени получает более приоритетный, менее же приориетные начнут "тормозить" первыми. Если несколько потоков имеют высший приоритет и в сумме не хватает, то "Тормозить" будет всё.
Absurd писал(а):Windows, например, жульничает в пользу активных пользовательских программ чтобы достигнуть лучшей отзывчивости интерфейса.
Жульничает в польузу? Эйси. А в ущерб чему? Тем же самым пользовательским программам? Не смешно.