_beginthreadex vs CreateThread
От: McQwerty Россия  
Дата: 25.10.01 09:30
Оценка:
Возможно-ли использование CreateThread вместо _beginthreadex если
используется версия библиотеки "Multithreaded DLL" а не "Multithreaded"?

MS VC 6.
Re: _beginthreadex vs CreateThread
От: TepMuHyc  
Дата: 25.10.01 10:14
Оценка:
Здравствуйте 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.
Re[2]: _beginthreadex vs CreateThread
От: Vodka  
Дата: 25.10.01 10:37
Оценка:
Здравствуйте 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.
Re[3]: _beginthreadex vs CreateThread
От: McQwerty Россия  
Дата: 26.10.01 07:47
Оценка:
Здравствуйте 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'ом?
Re[4]: _beginthreadex vs CreateThread
От: TepMuHyc  
Дата: 26.10.01 09:25
Оценка:
Здравствуйте 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.