Информация об изменениях

Сообщение Re[7]: Windows 10? от 14.10.2014 17:04

Изменено 14.10.2014 17:06 ononim

S>>Здравствуйте, ononim, Вы писали:
O>>>Удобно же — как иначе копировать динамически обновляемый текст?
S>>Блокировать текст, а не приложение.
O>Ну так и блокируется то вывод текста приложением, а не приложение. Никто не мешает приложению чтонить считать в специальном потоке, ничего не выводя.
Несогласные могут сами написать простой тест:
#include <process.h>
#include <windows.h>

void __cdecl beep_only_thread(void *)
{
    for (;;)
    {
        Beep(1000, 200);
        Sleep(1000);
    }
}

int main(int argc, char* argv[])
{
    unsigned int i;
    _beginthread(beep_only_thread, 0, 0);
    for ( i = 0;;++i)
    {
        printf("Hello %d!\n", i);
        Beep(300, 200);
        Sleep(1000);
    }

    return 0;
}

Если текст не выделять — пищит разными частотами, если выделять — только более высоким тоном, потому что printf подвисает в недрах kernel32!WriteConsoleInternal (что легко увидеть при помощи дебаггера) что блокирует _только_ тред main'а.
Re[7]: Windows 10?
S>>Здравствуйте, ononim, Вы писали:
O>>>Удобно же — как иначе копировать динамически обновляемый текст?
S>>Блокировать текст, а не приложение.
O>Ну так и блокируется то вывод текста приложением, а не приложение. Никто не мешает приложению чтонить считать в специальном потоке, ничего не выводя.
Несогласные могут сами написать простой тест:
#include <process.h>
#include <windows.h>

void __cdecl beep_only_thread(void *)
{
    for (;;)
    {
        Beep(1000, 200);
        Sleep(1000);
    }
}

int main(int argc, char* argv[])
{
    unsigned int i;
    _beginthread(beep_only_thread, 0, 0);
    for ( i = 0;;++i)
    {
        printf("Hello %d!\n", i);
        Beep(300, 200);
        Sleep(1000);
    }

    return 0;
}

Если текст не выделять — пищит разными частотами, если выделять — только более высоким тоном, потому что printf подвисает в недрах kernel32!WriteConsoleInternal (что легко увидеть при помощи дебаггера) что блокирует _только_ тред main'а. Так что если приложению во чтобы то ни стало требуется чтото делать, даже тогда когда юзер выделяет текст, который приложение понавыводило — у него есть способ это реализовать.