Многопоточность

  • Автор темы GRAMER
  • Дата начала
G

GRAMER

Гость
#1
Что это такое многопоточность
это CreateThread() Что ли ? :lol:
 
G

GRAMER

Гость
#4
Оно и есть CreateThread

Спасибо так и думал.
Сегодня статью читал у Intel типа сложно - многопоточность, этоже проше простого уже долго использую
 

shisik

Well-Known Member
26.08.2007
154
0
29
Харьков
#5
Только в VC++ лучше вместо CreateThread использовать _beginthreadex, только там с типы параметров немного отличаются. Для простоты использования можно использовать макрос:
Код:
#define chBEGINTHREADEX(psa, cbStack, pfnStartAddr, \
pvParam, fdwCreate, pdwThreadID) \
((HANDLE) _beginthreadex( \
(void *) (psa), \
(unsigned) (cbStack), \
(PTHREAD_START) (pfnStartAddr), \
(void *) (pvParam), \
(unsigned) (fdwCreate), \
(unsigned *) (pdwThreadID)))
Тогда вместо CreateThread достаточно написать chBEGINTHREADEX (параметры останутся те же).

И ещё. В многопоточном приложении могут возникнуть проблемы с совместным доступом разных потоков к одному и тому-же ресурсу (например, к глобальной переменной). На тему многопоточности, синхронизации потоков, да и вообще программирования под Windows, советую почитать Рихтера (макрос я взял как раз оттуда).
 
P

Pasha

Гость
#7
European
A thread in an executable that calls the C run-time library (CRT) should use the _beginthreadex and _endthreadex functions for thread management rather than CreateThread and ExitThread; this requires the use of the multi-threaded version of the CRT. If a thread created using CreateThread calls the CRT, the CRT may terminate the process in low-memory conditions.
 
04.09.2006
2 566
2
Минск
#8
Pasha, это понятно. Где связь CRT и VC++?

Я имел в виду, что речи о CRT не шло, и тут "луше использовать..."
 
P

Pasha

Гость
#10
European
Лучше использовать - IMHO лучше сразу обойти возможные грабли :)
 

shisik

Well-Known Member
26.08.2007
154
0
29
Харьков
#13
Я так и думал, что основным аргументом будет книжка Рихтера
А он что, не прав? Я ж не говорю, что CreateThread работать не будет. Просто лучше использовать именно _beginthreadex во избежание возможных проблем.