Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация мьютекс, мьютекс  
:(
    Опции темы
evgovs1991
Дата 7.11.2015, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите разобратся почему не выполняется условие  во втором Timer2?
Принцип работы приложения такой: запускаем первое начинают работать часы...затем запускаем второе...часы там не работают так как запущены в перво приложении. Как только нажимаю кнопку в первом,часы останавливаются и начинают работать часы во втором.
Идея моя такая: Когда открывается форма на событие on create() создаётся мьютекс если он уже создан то ничего не происходит. Установлен второй таймер который работает всегда и проверяет есть ли мьютекс или нет. По нажатию на кнопку останавливаются часы, удаляется мьютекс.
Код



#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
int s=0;
int m=0;
int h=0;
int x=0;
HANDLE H;
HANDLE hx;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
   Panel3->Caption=s;
   Panel2->Caption=m;
   Panel1->Caption=h;
   s++;
   if(s==60) {m++; s=0;}
   if(m==60) {h++; m=0;}
   if(h==24)  h=0;

}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
    Timer1->Enabled=false;
    ReleaseMutex(H);
    CloseHandle(H); // удаляем мьютекс , а не освобождаем его
    Sleep(3000);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Timer2Timer(TObject *Sender)
{

        if (OpenMutex(SYNCHRONIZE, true, "MyMutex")) // есть? Значит, другое приложение открыло диалог
        {
                Panel4->Caption=x;
                x++;
        }
        else{
            H=CreateMutex(NULL, true, "MyMutex");
            Timer1->Enabled=true;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm3::FormCreate(TObject *Sender)
{
    if(OpenMutex(SYNCHRONIZE, true, "MyMutex"))
        {
            Timer1->Enabled=false;;
        }
    else{
        H=CreateMutex(NULL, true, "MyMutex");
        }
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) evgovs1991 - 7.11.2015, 21:19
PM MAIL   Вверх
xvr
Дата 9.11.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



OpenMutex возвращает HANDLE, который надо закрывать. Иначе mutex не удалится, т.к. будет куча дубликатов HANDLE'ов, которые на него смотрят (из другого приложения после OpenMutex)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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