Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Семафоры в C ??? Есть ли Семафоры в C??? И если нет, то к 
:(
    Опции темы
Just_Girl
Дата 15.10.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Привет всем! Вопрос мой о Семафорах...
Есть ли Семафоры в C??? И если нет, подскажите пожалуйста, как это можно самой сделать? smile 


Это сообщение отредактировал(а) Just_Girl - 15.10.2007, 14:19
PM MAIL   Вверх
Lazin
Дата 15.10.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Есть в win32 api. 
Создаются с помощью ф-ии CreateSemaphore

PM MAIL Skype GTalk   Вверх
Just_Girl
Дата 15.10.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



К сожалению я работаю Metrowerks CodeWarrior, с 2D Engine, которую написал один программист. Может вожможно что т самой как-то написать, очень лёгкое?
PM MAIL   Вверх
Lazin
Дата 15.10.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Захватить семафор можно любой Wait функцией (WaitForSingleObject)
Освободить - ReleaseSemaphore
После использования нужно обязательно вызвать CloseHandle
Почитать подробнее можно в мсдн.

Добавлено через 2 минуты и 47 секунд
А разве нельзя с этим компилятором использовать windows api.

Добавлено через 3 минуты и 56 секунд
зы если не секрет, для чего нужен семафор?
PM MAIL Skype GTalk   Вверх
Just_Girl
Дата 15.10.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Я короче прохожу стажировку, сейчас как-бы на подготовке. Тренируюсь с Tasks. Так-как тут всё немножко по другому, надо работать с Tasks и когда очень много действий, они не дают друг-другу работать. Я сейчас пробую сделать симуляцию на банковский автомат и ет надо с семафорами. smile 
PM MAIL   Вверх
Lazin
Дата 15.10.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(MSDN)

Код

  HANDLE WINAPI CreateSemaphore(
  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  LONG lInitialCount,
  LONG lMaximumCount,
  LPCTSTR lpName
);


Код

//создаем:
HANDLE semaphore = CreateSemaphore(
 NULL,//Дескриптор не наследуеца
 0,//начальное значение семафора
 3,//ну допустим три (потока)
 NULL//вряд-ли тебе это нужно 
);
*****
//в потоке
DWORD wresult = WaitForSingleObject(semaphore, INFINITE/*ждать долго*/);
if (wresult == WAIT_OBJECT_0)
{
 //все Ок
 //делаем то что нужно
 ReleaseSemaphore(semaphore);//освобождаем семафор
}

Работает это так: когда поток выполняет ф-ю WaitForSingleObject, если семафор занят менее чем тремя потоками выполнение продолжается, иначе поток блокируется, пока поток владеющий semaphore, не выполнит ф-ю ReleaseSemaphore.
PM MAIL Skype GTalk   Вверх
Just_Girl
Дата 15.10.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



хммм.........чтот трудновато. smile Я в интернете видела такое решение, но хочу что т лёхкое, с booleans
PM MAIL   Вверх
Lazin
Дата 15.10.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Ну можно критические секции использовать. Только они блокируют все кроме одного потока.
Код

CRITICAL_SECTION cs;//глобальная переменная которую все видят
InitializeCriticalSection(&cs);

EnterCriticalSection(&cs);
//все что между этими 2мя ф-ями может выполнять одновременно
//только один поток, остольные ждут в сторонке
LeaveCriticalSection(&cs);

PM MAIL Skype GTalk   Вверх
Just_Girl
Дата 15.10.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Что ты опытный я уже поняла, хаха но мой уровень не высок, с C только начала работать.  
PM MAIL   Вверх
Alek86
Дата 15.10.2007, 15:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



убери комментарии - и ничего трудного не будет smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 15.10.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(Just_Girl @  15.10.2007,  15:22 Найти цитируемый пост)
Я в интернете видела такое решение, но хочу что т лёхкое, с booleans

это вряд-ли, можно попробовать еще какую-нибудь библиотеку (boost), это все зависит от того чем ты пользуешься.
PM MAIL Skype GTalk   Вверх
Just_Girl
Дата 15.10.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.8.2007

Репутация: нет
Всего: нет



Nitro SDK, слишал об этом?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.