Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: LPT и CreateFile()  (Прочитано 10965 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kot
Гость
« : 14-07-2003 02:45 » 

Тут я видел у Джона был вопрос про 90 сек при работе с LPT, может кто вообще объяснит мне глупому как с LPT работать через этот CreateFile() у меня при WriteFile прога вообще уходит в великое нично.
Кстати или не кстати мож кто подскажет как под винду таймер сделать на 1 мс малой кровью
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 14-07-2003 05:17 » 

Тему перенес я, так как отношения к C/C++ она почти не имеет.

Этот вопрос про LPT и WriteFile обсуждался на старом форуме вот тут

http://www.shelek.com/club/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=191&48

и тут

http://www.shelek.com/club/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=201&23

Если что надо дополнить- пиши.
Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #2 : 06-08-2003 22:34 » 

На счет таймера

если тебе не нужна большая точность, т.е. тебе надо чтобы в СРЕДНЕМ таймер срабатывал 1 раз за мс, то наш выбор

UINT SetTimer(HWND hwnd,       дискриптор окна
                      UINT timerID,      ID таймера (чтобы различать таймеры)
                      UINT Elapse,       задержка (в милисекундах)
                      TIMERPROC lpTimerProc);    callback timer function

если будем обрабатывать в оконной процедуре (WM_TIMER) то lpTimerProc, а hwnd дискриптор окна куда будут слаться сообщения, если с помощью функции обратного вызова, то lpTimerProc = 0.

Если нужна большая точность, то наш выбор DWORD GetTickCount();
Функция возвращает количество мс прошедших с момента запуска ОС =>
вот так будет очень точно...

DWORD start = GetTickCount();
while (GetTickCount() - start < 1)
     ;

... но отожрутся ресурсы процессора,

ну а еще есть Sleep(количество мс) - экономит ресурсы но опятьже не точно
Sleep(1);
Записан

С уважением Lapulya
maa
Гость
« Ответ #3 : 27-08-2003 06:14 » 

SetTimer () не пойдёт. для него разрешение порядка 50 мс.

Используй

#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

timeSetEvent ( 1, 1, &TimerProc, ( DWORD ) this, TIME_PERIODIC | TIME_CALLBACK_FUNCTION /*| TIME_KILL_SYNCHRONOUS*/ );

Анлрей.
Записан
Serega
Гость
« Ответ #4 : 27-08-2003 07:46 » 

MSDN советует использовать Multimedia Timers, если разрешения WM_TIMER не хватает
Записан
Джон
Гость
« Ответ #5 : 27-08-2003 07:59 » new

Про таймер - выложу просто кусок кода который я сделал для тайминга протоколов:
BOOL WaitOnStatus( UINT status, UINT nTimeOut /* = 0 */ )
{
   BOOL bAnswer = FALSE;

   // Query system time
   static __int64 lnFrequency = 0;
   __int64 lnStartTime;
   LARGE_INTEGER liTime;

   if (lnFrequency == 0)
   {
      ::QueryPerformanceFrequency(&liTime);
      lnFrequency = liTime.QuadPart;
   }
   __int64 lnTimeOut = (__int64)nTimeOut * lnFrequency;
   ::QueryPerformanceCounter(&liTime);
   lnStartTime = liTime.QuadPart;

   UCHAR ucReg;
   UCHAR ucMask = status >> 8;
   UCHAR ucStatus = (UCHAR)(status & 0xFF);

   do
   {
      ucReg = GetPortByte(g_hTVicHW32, g_ulBaseAddress + 1);
      bAnswer = ((ucReg & ucMask) == ucStatus);
      if(nTimeOut >= 0)
      {
         ::QueryPerformanceCounter(&liTime);
         if ((liTime.QuadPart - lnStartTime) * 1000 > lnTimeOut)
         {
            break;
         }
      }
   }
   while (!bAnswer);

   return bAnswer;   
}

Статус - маска для опроса состояния, но она тебе не нужна, посмотри, как таймер работает....  Тайм аут передаётся в микросекундах.

А про параллельный порт если не ясно (после просмотра того, что тебе Слава посоветовал )- то пиши - разберёмся, в принципе там всё по стандарту.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines