Здравствуйте McQwerty, Вы писали:
MQ>Возможно-ли использование CreateThread вместо _beginthreadex если MQ>используется версия библиотеки "Multithreaded DLL" а не "Multithreaded"?
Ты можешь использовать _любую_ библиотеку с любой из этих функций.
Реальные отличия у CreateThread и _beginthreadex следующие:
CreateThread
-- это функция Win32 API доступная только на платформе Windows
-- ниточная функция должна иметь сошлашение по вызову WINAPI или __stdcall и должна
возвращать DWORD
_beginthreadex
-- это функция вроде бы совместимая со стандартом ANSI и по идее доступна
на других платформах
-- ниточная функция должна иметь сошлашение по вызову cdecl и ничего не должна
возвращать (т.е. void)
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Здравствуйте TepMuHyc, Вы писали:
TMH>Здравствуйте McQwerty, Вы писали:
MQ>>Возможно-ли использование CreateThread вместо _beginthreadex если MQ>>используется версия библиотеки "Multithreaded DLL" а не "Multithreaded"? TMH>Ты можешь использовать _любую_ библиотеку с любой из этих функций.
TMH>Реальные отличия у CreateThread и _beginthreadex следующие: TMH>CreateThread TMH> -- это функция Win32 API доступная только на платформе Windows TMH> -- ниточная функция должна иметь сошлашение по вызову WINAPI или __stdcall и должна TMH> возвращать DWORD TMH>_beginthreadex TMH> -- это функция вроде бы совместимая со стандартом ANSI и по идее доступна TMH> на других платформах TMH> -- ниточная функция должна иметь сошлашение по вызову cdecl и ничего не должна TMH> возвращать (т.е. void)
Основное отличие состоит в том, что _beginthreadex ещё кое-что делает Run-Time Library, в частности
инициализирует такие переменные как _errno.
Поэтому, если нет вызовов функций Run-Time Library, то можно обойтись и CreateThread.
Здравствуйте Vodka, Вы писали:
V>Здравствуйте TepMuHyc, Вы писали:
TMH>>Здравствуйте McQwerty, Вы писали:
MQ>>>Возможно-ли использование CreateThread вместо _beginthreadex если MQ>>>используется версия библиотеки "Multithreaded DLL" а не "Multithreaded"? TMH>>Ты можешь использовать _любую_ библиотеку с любой из этих функций.
TMH>>Реальные отличия у CreateThread и _beginthreadex следующие: TMH>>CreateThread TMH>> -- это функция Win32 API доступная только на платформе Windows TMH>> -- ниточная функция должна иметь сошлашение по вызову WINAPI или __stdcall и должна TMH>> возвращать DWORD TMH>>_beginthreadex TMH>> -- это функция вроде бы совместимая со стандартом ANSI и по идее доступна TMH>> на других платформах TMH>> -- ниточная функция должна иметь сошлашение по вызову cdecl и ничего не должна TMH>> возвращать (т.е. void)
V>Основное отличие состоит в том, что _beginthreadex ещё кое-что делает Run-Time Library, в частности V>инициализирует такие переменные как _errno. V>Поэтому, если нет вызовов функций Run-Time Library, то можно обойтись и CreateThread.
Вопрос был связан со следующей фразой из MSDN:
"You must use _beginthread instead of CreateThread in C programs built with LIBCMT.LIB if you intend to call C run-time functions."
LIBCMT — это "Multithreaded" (опция /MT компилятора).
MSVCRT — это "Multithreaded DLL" (опция /MD).
Если я использую /MD — могу я вызывать RTL-функция из потоков созданных CreateThread'ом?
Здравствуйте McQwerty, Вы писали:
MQ>Вопрос был связан со следующей фразой из MSDN: MQ>"You must use _beginthread instead of CreateThread in C programs built with LIBCMT.LIB if you intend to call C run-time functions."
MQ>LIBCMT — это "Multithreaded" (опция /MT компилятора). MQ>MSVCRT — это "Multithreaded DLL" (опция /MD).
MQ>Если я использую /MD — могу я вызывать RTL-функция из потоков созданных CreateThread'ом?
Ответ: МОЖЕШЬ. За малым исключением.
Очень немногие RTL функции используют глобальные переменные которые в
многониточной версии превращены в "ниточные" переменные.
вот их почти полный список: strtok, strerror, tmpnam, tmpfile, asctime, gmtime, ecvt, signal
А вообще, если хочешь найти их все, ищи те функции что вызывают ф-цию _getptd()
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.