Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 17:46   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Общение с потоками через WaitForSingleObject(С++)

Решил разобраться с потоками и в С++ =)
Вроде всё понятно. Смотрел это пример:
Код:
unsigned __stdcall CaptureThreadFunc( void * arg) // Поток, готовящий данные
{
	while (bSomeCondition)
	{
		WaitForSingleObject(hEventForCaptureTh,INFINITE); // Ждем своего события
		... // Готовим данные
		SetEvent(hEventForTransmitTh); // Разрешаем работать второму потоку
	}
	_endthreadex( 0 );
	return 0;
};

unsigned __stdcall TransmitThreadFunc( void * arg) // Поток, отсылающий данные.
{
	while (bSomeCondition)
	{
		WaitForSingleObject(m_hEventForTransmitTh,INFINITE); // Ждем своего события
		... // Данные готовы, формируем из них пакет для отправки
		SetEvent(hEventForCaptureTh); // Разрешаем работать первому потоку, а сами...
		... // отправляем пакет
	}
	_endthreadex( 0 );
	return 0;
};

int main(int argc, char* argv[]) // Основной поток
{
	// Создаем два события с автосбросом, со сброшенным начальным состоянием
	hEventForCaptureTh = CreateEvent(NULL,FALSE,FALSE,NULL);
	hEventForTransmitTh = CreateEvent(NULL,FALSE,FALSE,NULL);
	
	// Создаем потоки
	hCaptureTh = (HANDLE)_beginthreadex( NULL, 0, &CaptureThreadFunc, 0, 0,&uTh1);
	hTransmitTh = (HANDLE)_beginthreadex( NULL, 0, &TransmitThreadFunc, 0, 0,&uTh2);
	// Запускаем первый поток
	SetEvent(hEventForCaptureTh);

	....
}
Собственно вот и вопросы:
1) Как сделать в делфи такую же штуку: WaitForSingleObject(hEventForCaptur eTh,INFINITE);
После того, как дописал этот вопрос, понял, что цифры два не будет =) Но есть и вопросы по C++. Думаю, никому не будет хуже, если я оставлю их здесь:
1) Можно ли создать такой же поток, как в делфи - унаследовав от TThread?
2) Как в C++ создать поля у класса (property) - вопрос снимается - уже догадался залезть в компонент)

Добавлено для Delphi:
Вспомнил ещё вопрос:
2) Mutex в C++ это то же самое, что и CriticalSection в делфи? Помню, как-то давно, читал про потоки в делфях - там было и про критические секции и про мьютексы, вроде. КС мне показались боле удобными, и с тех пор я пользуюсь только ими.

Последний раз редактировалось TwiX; 12.05.2010 в 17:57.
TwiX вне форума Ответить с цитированием
Старый 12.05.2010, 18:49   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

По какой-такой причине?

Добавлено:
Ну тогда и этот пост =)

Последний раз редактировалось TwiX; 12.05.2010 в 20:26.
TwiX вне форума Ответить с цитированием
Старый 12.05.2010, 19:54   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
 WaitForSingleObject
это ВинАПИ. Делфи призналась, что все есть в можуле Виндовс (странно, да?)

Цитата:
2) Mutex в C++ это то же самое, что и CriticalSection в делфи?
Не совсем...
p51x вне форума Ответить с цитированием
Старый 12.05.2010, 19:59   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
По какой-такой причине?
Сори. Совсем запарился. Имел ввиду пост удалить.
М-м-м, да. Не красиво получилось
Sibedir вне форума Ответить с цитированием
Старый 12.05.2010, 20:28   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

2p51x, а как организовать такое же событие в Делфи? И в чём отличие мьютекса от кс =)
TwiX вне форума Ответить с цитированием
Старый 13.05.2010, 18:58   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Апппппппппп
TwiX вне форума Ответить с цитированием
Старый 13.05.2010, 19:10   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
2) Mutex в C++ это то же самое, что и CriticalSection в делфи? Помню, как-то давно, читал про потоки в делфях - там было и про критические секции и про мьютексы, вроде. КС мне показались боле удобными, и с тех пор я пользуюсь только ими.
и то и то ногами растет из АПИ.
Цитата:
1) Можно ли создать такой же поток, как в делфи - унаследовав
от TThread?
ну если VCL у BC++ то да.
Цитата:
1) Как сделать в делфи такую же штуку: WaitForSingleObject(hEventForCaptur eTh,INFINITE);
WinAPI

какие вопросы еще остались?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2010, 22:44   #8
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо) Не могу плюс поставить - форум не разрешает...
1) Так по принципу работы они ничем не отличаются?
2) TThread устроен через _beginthreadex? Какой аналог у _beginthreadex в делфи - помню там тоже какая-то простенькая функция была...
3) А какой аналог у
Код:
hEventForCaptureTh = CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(hEventForCaptureTh);
TwiX вне форума Ответить с цитированием
Старый 13.05.2010, 22:57   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

2)BeginThread там есть
а можно еще банально АПИшную CreateThread
3)
Код:
var hEventForCaptureTh:THandle;
hEventForCaptureTh:=CreateEvent(nil,false,false,nil);
SetEvent(hEventForCaptureTh);
1)
Цитата:
В операционных системах семейства Microsoft Windows разница между мьютексом и критической секцией в том, что мьютекс является объектом ядра и может быть использован несколькими процессами одновременно, критическая секция же принадлежит процессу и служит для синхронизации только его потоков.
http://ru.wikipedia.org/wiki/Критическая_секция
http://ru.wikipedia.org/wiki/Мютекс
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2010, 23:54   #10
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо ещё раз - теперь разобрался =)
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WaitForSingleObject besserebrenik Win Api 3 15.02.2010 22:40
WaitForSingleObject в Delphi 2009 Хамяг Win Api 11 03.12.2009 09:06
Общение на форуме NITRO2025 Свободное общение 53 19.10.2009 16:40
вопрос по функции WaitForSingleObject shurik_7866 Общие вопросы Delphi 2 08.12.2008 10:53
Общение программ через TEvent UnD)eaD)Snake Win Api 6 11.09.2007 07:03