Мое почтение всем. Есть программа, в ней несколько потоков. Я модифицирую какое-то количество памяти в программе. Необходимо, чтобы до конца этой операции не происходило переключение на другие потоки. Как лучше всего это провернуть? Заморозить все потоки я не имею права. Повышать приоритет потока тоже нежелательно. Есть еще какие-нибудь способы (включая грязные хаки) это сделать? Заранее благодарен.
"Другие потоки" свои же? Если нет, то никак ибо нарушается принцип многозадачности /в данном случае многопоточности/ OC Win в данном случае. Выход - лезть в ядро.
Всем спасибо . В общем, я попробую критические секции (это больше всего, судя по всему, подходит) и посмотрю, насколько это скажется на общей производительности. Если будет тормозить -- буду пробовать предложенные варианты. Или уточнение какое напишу.
Mental_Mirror Каюсь, еще не читал. Я пока не определился, что первым изучить изнутри: *nix или Win. Или и то и другое вместе, но это маловероятно.
Mika0x65 Хз. Но могу предложить. Пишешь драйвер. Заказываешь DPC, и там делаешь своё грязное дело. Если уж в юзермоде никак нельзя это сделать., хотя не могу понять почему.
А не проще ли махинаций с приоритетами пройтись по всем SuspendThread, а после операции ResumeThread? Не вижу причин не морозить всё.
keksn Учитывая, что я внедряю свою библиотеку в онлайн-игру, морозить все потоки подряд несколько опасно. Хотя, критическая секция, как я понял, делает примерно то же самое.
keksn Скорость выполнения меня волнует. Дело в том, что я использую SEH, который сам по себе не очень быстрый, при чем, возможно, вызываться мой SEH обработчик будет довольно часто. Поэтому мне надо быть очень быстрым.