Когда хорошо использовать c ++ iostreams по ReadFile, WriteFile, fprintf, и т.д. …?

Я нахожу, что чрезвычайно легче использовать потоки в c ++ вместо функций окон как ReadFile, WriteFile, и т.д. или даже fprintf. Когда не хорошо использовать потоки? Когда хорошо использовать потоки? Действительно ли безопасно использовать потоки? Каким образом много программистов не использует потоки?

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

8
задан Brian T Hannan 21 January 2010 в 17:58
поделиться

6 ответов

Когда нехорошо использовать потоки?

  • Потоки не гарантированно будут безопасны для потоков. Легко придумать ситуацию, когда нельзя использовать потоки без некоторой синхронизации.
  • Потоковые объекты обычно довольно "тяжелые". Они могут быть слишком тяжелыми для малой памяти или встроенных сред.

Когда хорошо использовать потоки?

В общем случае.

Безопасно ли использовать потоки?

Да, но нужно быть осторожным при асинхронном распределении потока.

Почему многие программисты не используют потоки?

Предпочтения, стиль, или они сначала выучили другой метод (или другой язык). Я нахожу, что много старых примеров "c++" в интернете написаны с C-образным вкусом, предпочитая printf, а не cout.

10
ответ дан 5 December 2019 в 05:26
поделиться

Потоки, как правило, вполне безопасны. При некоторых обстоятельствах они могут быть медленными и/или неуклюжими. Медленные, в основном, возникают из-за того, что они накладывают несколько дополнительных уровней между вашим кодом и операционной системой, и при неправильных обстоятельствах эти уровни могут добавлять накладные расходы. Неуклюжесть, в основном, по сравнению с C printf, а не прямое использование чего-то вроде WriteFile (который напрямую не поддерживает форматирование вообще). Например, рассмотрим:

printf("%2.2x", ch);` 

-

std::cout << std::hex << std::setw(2) << std::setprecision(2) << std::setfill('0') << ch; 
std::cout << setfill(' ');

Тогда учтите тот факт, что если вас волнует i18n, printf использует строку, которую легко читать из внешнего источника, где поток C++ встраивает все форматирование в структуру кода, так что практически любое изменение форматирования требует переписывания кода, перекомпиляции и перекомпоновки.

CreateFile, ReadFile и т.д. также позволяют ряд вещей, таких как файлы с отображением в памяти и перекрытием чтения и записи, которые вообще не поддерживаются iostreams. Если ситуация позволяет вам использовать их с пользой, iostreams часто не будет конкурентоспособным.

11
ответ дан 5 December 2019 в 05:26
поделиться

Вы не можете сделать асинхронный файл ввода / вывода с потоками ...

4
ответ дан 5 December 2019 в 05:26
поделиться
  1. Когда вы хотите ваше приложение быть портативным на разные платформы.

  2. Когда вы хотите более краткий код: функции Win32 имеют более сложные семантики, часто требуют набора функций, чтобы сделать что-то, и определенно иметь больше параметров.

3
ответ дан 5 December 2019 в 05:26
поделиться

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

Одной из причин, по которым мне нравится Cout (), это сырая скорость.

В моем опыте это имеет тенденцию быть довольно религиозной проблемой.

1
ответ дан 5 December 2019 в 05:26
поделиться

Одной из причин I18N

string time = "4:32";
cout << "the current time is " << time;
cout << "वर्तमान समय " << time << " है।"
cout << time << "في الوقت الحالي هو";

против

string format = "the current time is %s";
string format = "वर्तमान समय %s है।";
string format = "%s في الوقت الحالي هو";
printf(format, time);
1
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: