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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2011, 21:41   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Проверка времени, сцепление

Ребят, в чем траблс? Почему когда я пытаюсь сравнить время в функции EventsManager, примерно следующим образом.

Код:
if (st.wHour == CatchUpEvent.t_Struct[x].wHour && st.wMin == CatchUpEvent.t_Struct[x].wMin)
 printf("Not Work");
Но если я сцеплю два WORD/а в четыре байта и сделаю сравнения следующим образом, все работает.

Код:
DWORD dwCurrentTime = MAKELONG(st.wHour, st.wMinute);
DWORD dwStartEventTime = MAKELONG(CatchMeEvent.t_Struct[x].wHour, CatchMeEvent.t_Struct[x].wMinute);

if (dwCurrentTime == dwStartEventTime)
{
 printf("Work");
}
Код:
CCatchMeEvent CatchMeEvent;

CCatchMeEvent::CCatchMeEvent()
{

};

CCatchMeEvent::~CCatchMeEvent()
{

};

void CCatchMeEvent::ReadEvent(char *pFilePath)
{
 FILE *fp;
 char zBuffer[1024];

 fopen_s(&fp, "./CatchMeEvent.txt", "r");

 this->e_Num = 0;	

 if(fp == NULL)
 {
   ExitProcess(0);
   return;
 }

 while(!feof(fp))
 {
  fgets(zBuffer, 1024, fp);
		
  if (!strcmp(zBuffer, "end"))
   break;

  if (zBuffer[strlen(zBuffer) - 1] == '\n' || zBuffer[strlen(zBuffer) - 1] == '\r')
  {
   if (zBuffer[0] != '/' || zBuffer[1] != '/')
   {
    int wHour = 0, wMinute = 0, wSecond = 0; 
    sscanf_s(zBuffer, "%d %d %d", &wHour, &wMinute, &wSecond); 

    this->t_Struct[this->e_Num].wHour   = wHour; 
    this->t_Struct[this->e_Num].wMinute = wMinute;
    this->t_Struct[this->e_Num].wSecond = wSecond;

    e_Num++;
   }
  }
 }
 fclose(fp);
};

void CCatchMeEvent::StartEvent(void *lParam)
{
 while (true)
 {
  printf("Event Has Started");
  Sleep(1000);
  // Some cond. to break infinite cicle
 }
 _endthread();
};

void CCatchMeEvent::CheckTime()
{
};

void EventsManager(void *lParam)
{
 SYSTEMTIME st;

 CatchMeEvent.ReadEvent("./CatchMeEvent.txt");
 printf("Config fail loaded successfully!\n");
 printf("[%d][%d][%d]", CatchMeEvent.t_Struct[0].wHour, CatchMeEvent.t_Struct[0].wMinute, 0);

 while (true)
 {	
  GetLocalTime(&st);

  for (int x = 0; x < CatchMeEvent.e_Num; x++)
  {
   if (CatchMeEvent.t_Struct[x].wHour == 24)
    CatchMeEvent.t_Struct[x].wHour = 0;

   DWORD dwCurrentTime = MAKELONG(st.wHour, st.wMinute);
   DWORD dwStartEventTime = MAKELONG(CatchMeEvent.t_Struct[x].wHour, CatchMeEvent.t_Struct[x].wMinute);
  
   if (dwCurrentTime == dwStartEventTime)
   {
    _beginthread(CatchMeEvent.StartEvent, 0, NULL);
   }
  }
  
  // Some cond. to break infinite cicle
  Sleep(60000);
 }
 _endthread();
}

int main(void)
{
 DWORD dwThreadID;
 HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)EventsManager, NULL, 0, &dwThreadID);
 CloseHandle(hThread);
 _getch();
 return 0;
}
coNsept вне форума Ответить с цитированием
Старый 04.10.2011, 22:09   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

1. Это не работает только в потоке?
2. Почему сначала CreateThread, а потом _beginthread?
3. printf("Config fail loaded successfully!\n");??? facepalm...
TwiX вне форума Ответить с цитированием
Старый 04.10.2011, 22:18   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
1. Это не работает только в потоке?
2. Почему сначала CreateThread, а потом _beginthread?
3. printf("Config fail loaded successfully!\n");??? facepalm...
1) А хз, но мне нужно проверять это только в потоке.
2) Просто, я экспериментирую.
3) Ну там должна стоять проверка, я пока еще не сделал. В принципе это не важно, эт потом, меня пока интересует этот вопрос что задал.
coNsept вне форума Ответить с цитированием
Старый 04.10.2011, 22:19   #4
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
1. Это не работает только в потоке?
2. Почему сначала CreateThread, а потом _beginthread?
3. printf("Config fail loaded successfully!\n");??? facepalm...
1) А хз, но мне нужно проверять это только в потоке.
2) Просто, я экспериментирую.
3) Ну там должна стоять проверка, я пока еще не сделал. В принципе это не важно, эт потом, меня пока интересует этот вопрос что задал.
coNsept вне форума Ответить с цитированием
Старый 05.10.2011, 00:09   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Всё должно работать:
Код:
	SYSTEMTIME st, st2;
	GetLocalTime(&st);
	cout << st.wHour << ":" << st.wMinute << endl;
	st2.wHour=0;
	st2.wMinute=8;
	if (st2.wHour==st.wHour&&st2.wMinute==st.wMinute)
		cout << "It works!" << endl;
Это работало в 00:08 =)

А по поводу 3), то fail - это не "файл"
TwiX вне форума Ответить с цитированием
Старый 05.10.2011, 18:03   #6
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Спасибо я попробую еще раз, может глюки какие-нить были.
На счет "3)" просто опечатка, в курсе что File.
coNsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сцепление текстов Igor001 Microsoft Office Excel 3 13.02.2010 16:27
проверка по времени Quik Microsoft Office Excel 4 29.04.2009 10:54
Проверка нажатия конкретной клавиши (или нескольких клавиш) в реальном времени ROD Общие вопросы C/C++ 2 15.01.2009 13:11
Сцепление строк julia23 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.11.2007 08:56