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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2020, 21:46   #1
beruk
Пользователь
 
Регистрация: 20.10.2020
Сообщений: 13
По умолчанию Функция тормозит исполнение программы.

Делаю так:
Код:
    //1. Создаю таймер:
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
      {
      SetTimer(hWnd, Timer1, 1000, (TIMERPROC)NULL);
      }
    
    //2. Запускаю таймер:
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
      {
      switch (message)
        {
        case WM_TIMER:
         myFuncion();
        break;
        }
      }

    //3. Функция, которая выполняется по таймеру:
    void myFunction()
      {
       hOpenHandle = InternetOpenA("Program", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
       if (hOpenHandle)
         {
         hConnectHandle = InternetConnectA(hOpenHandle, myHost, INTERNET_DEFAULT_HTTP_PORT, myLogin, myPassword, INTERNET_SERVICE_HTTP, NULL, NULL);
         if (hConnectHandle)
           {
           hResourceHandle = HttpOpenRequestA(hConnectHandle, "GET", Pass, HTTP_VERSION, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);

           HttpSendRequestA(hResourceHandle, postHead, 45, NULL, 0);
            
           DWORD dwBytesRead = 2000;
           TCHAR  szData[2000] = "Error";
           InternetReadFile(hResourceHandle, &szData, sizeof(szData) - 1, &dwBytesRead);
           szData[dwBytesRead];

           InternetCloseHandle(hResourceHandle);
           InternetCloseHandle(hConnectHandle);
           }

         InternetCloseHandle(hOpenHandle);
         }
      }
Все работает, но при выполнении запроса, а конкретно на HttpSendRequestA или InternetReadFile, программа подвисает на доли секунды, что очень неприятно.

Вопрос:
1. Либо я что-то сделал не правильно, тогда поправьте пожалуйста.
2. Либо мне нужно выделить для исполнения этого отдельный ресурс.
Как я понял, сделать это я могу через CreateThread? Или я ни чего не понял?
beruk вне форума Ответить с цитированием
Старый 13.11.2020, 07:22   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

beruk, две ошибки видно невооружённым глазом:
1) нет возврата значения из InitInstance
2) нет возврата значения из WndProc


Цитата:
Сообщение от beruk Посмотреть сообщение
программа подвисает на доли секунды
ну, это нормально, интернет работает не моментально
Алексей1153 вне форума Ответить с цитированием
Старый 13.11.2020, 08:19   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от beruk Посмотреть сообщение
программа подвисает на доли секунды
Выводите запрос в асинхронный поток. Пусть там думает паралельно и затем выдает результат.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему тормозит такая функция Krasi Общие вопросы .NET 0 09.11.2015 15:50
Исполнение программы с системными правами challengerr Win Api 1 20.11.2014 15:24
Как спрятать окно программы, продолжив её исполнение? vortexx1 Общие вопросы C/C++ 4 24.06.2011 19:38
Собственная функция поиска тормозит Эксель Maxx Microsoft Office Excel 7 20.01.2010 15:46
Исполнение скрипта для AutoCad Stilet Помощь студентам 2 07.07.2008 08:17