Форум программистов, компьютерный форум CyberForum.ru

Использование CreateThread - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, корректно ли расставлены круглые, фигурные и квадратные скобки http://www.cyberforum.ru/cpp-beginners/thread623801.html
Вот такая вот нехитрая вроде бы задача: Для введённой пользователем с клавиатуры строки (максимальная длина строки — 80 символов) программа должна определить, корректно ли расставлены круглые, фигурные и квадратные скобки или нет. Перемешивание скобок (пример: {) считается некорректным вариантом.
C++ Как разбить на лексемы Не могу понять как разбить на лексемы, помагите если не сложно Вот участок кода: #include <iostream> #include <locale.h> #include <math.h> using namespace std; int main() { setlocale(LC_ALL, "Rus"); int A, B; cout << "Введите A больше нуля + меньше десятки в девятой степени" << endl; http://www.cyberforum.ru/cpp-beginners/thread623794.html
Присвоение указателю члену класса нового адреса, ошибка компиляции C++
Идея в том, чтобы хранить в отдельном списке объекты типа B и передавать в объект типа A указатель на объект B из списка. Допустим есть следующий код: class A { public: void SetB(const B * newB){ itsB = newB;} //Ошибка private:
C++ Как скрыть файл .dll
Я бы хотел знать как можно скрыть файл .dll ?
C++ передача аргументов http://www.cyberforum.ru/cpp-beginners/thread623769.html
Здравствуйте,объясните пожалуйста,на примерах кода,что означает передача аргументов по ссылке, по значению,передача копий аргументов?
C++ Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N) Найти максимальное совершенное число, которое в то же время меньше введенного N Справка: Число называется совершенным, если оно равно сумме всех своих делителей за исключением его самого НЕ могу понят в чем суть задачи подробнее

Показать сообщение отдельно
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632

Использование CreateThread - C++

14.07.2012, 18:13. Просмотров 4513. Ответов 12
Метки (Все метки)

Создаю функцию для потока,запускаю её с помощью _beginthread и всё нормально работает,но если использовать CreateThread,то возникают ошибки
функция,используемая с
_beginthread

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "StdAfx.h"
 
//-----------------------------------------------------------------------
//функция для установления соединения,получения данных и записи их в файл
//-----------------------------------------------------------------------
 
//объявляем буфер, для хранения возможной ошибки, размер определяется в самой библиотеке
static char errorBuffer[CURL_ERROR_SIZE];
//объявляем буфер принимаемых данных
//static string buffer;
 
 
typedef struct
{
    string buffer;
}DATA, *PDATA;
 
//функция обратного вызова
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
  //переменная - результат, по умолчанию нулевая
  int result = 0;
 
  if (buffer != NULL)
  {
    //добавляем к буферу строки из data, в количестве nmemb
    buffer->append(data, size * nmemb);
    //вычисляем объем принятых данных
    result = size * nmemb;
  }
  //вовзращаем результат
  return result;
}
 
 
 
void connect(PVOID pvoid)
{
    PINFO pinfo = (PINFO)pvoid;
 
    setlocale(0,"");
 
    DWORD dwTlsIndex = TlsAlloc();
 
    TlsSetValue(dwTlsIndex,GlobalAlloc(GPTR,sizeof(DATA)));
 
    PDATA pdata;
 
    pdata = (PDATA)TlsGetValue(dwTlsIndex);
 
    //необходимые CURL объекты
    CURL *curl;
    CURLcode result;
    //инициализируем curl
    curl = curl_easy_init();
 
    //проверяем результат инициализации
  if (curl)
    {
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
      //задаем все необходимые опции
      curl_easy_setopt(curl, CURLOPT_URL,pinfo->url);
     
      curl_easy_setopt(curl, CURLOPT_HEADER, 0);         // не возвращает заголовки
      curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
      curl_easy_setopt(curl, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
 
      curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
      curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120);        // таймаут ответа
      curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
 
 
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &(pdata->buffer));
      //запускаем выполнение задачи
      result = curl_easy_perform(curl);
 
      //проверяем успешность выполнения операции
      if (result == CURLE_OK)
        {
        string fn(pinfo->NameOfFile);
        ofstream f(fn.c_str());
        if(!f) { MessageBox(pinfo->hwnd, "Can't create file","Error",MB_OK);}
        else   { f<<pdata->buffer<<endl; f.close();}
        }
  }
    else
    //выводим сообщение об ошибке
    MessageBox(pinfo->hwnd, "Can't connect","Error",MB_OK);
 
     
  //завершаем сессию
  curl_easy_cleanup(curl);
 
  TlsFree(dwTlsIndex);
 
  _endthread();
}
,а вот с
CreateThread

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "StdAfx.h"
 
//-----------------------------------------------------------------------
//функция для установления соединения,получения данных и записи их в файл
//-----------------------------------------------------------------------
 
typedef struct
{
    string buffer;
    char errorBuffer[CURL_ERROR_SIZE];
    CURL *curl;
    CURLcode result;
}DATA, *PDATA;
 
//функция обратного вызова
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
  //переменная - результат, по умолчанию нулевая
  int result = 0;
 
  if (buffer != NULL)
  {
    //добавляем к буферу строки из data, в количестве nmemb
    buffer->append(data, size * nmemb);
    //вычисляем объем принятых данных
    result = size * nmemb;
  }
  //вовзращаем результат
  return result;
}
 
 
DWORD WINAPI connect(LPVOID pvoid)
{
    PINFO pinfo = (PINFO)pvoid;
 
    setlocale(0,"");
 
    DWORD dwTlsIndex = TlsAlloc();
 
    TlsSetValue(dwTlsIndex,GlobalAlloc(GPTR,sizeof(DATA)));
 
    PDATA pdata;
 
    pdata = (PDATA)TlsGetValue(dwTlsIndex);
    
    
    //инициализируем curl
    pdata->curl = curl_easy_init();
 
    //проверяем результат инициализации
  if (pdata->curl)
    {
    curl_easy_setopt(pdata->curl, CURLOPT_ERRORBUFFER, pdata->errorBuffer);
      //задаем все необходимые опции
      curl_easy_setopt(pdata->curl, CURLOPT_URL,pinfo->url);
     
      curl_easy_setopt(pdata->curl, CURLOPT_HEADER, 0);         // не возвращает заголовки
      curl_easy_setopt(pdata->curl, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
      curl_easy_setopt(pdata->curl, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
 
      curl_easy_setopt(pdata->curl, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
      curl_easy_setopt(pdata->curl, CURLOPT_TIMEOUT, 120);        // таймаут ответа
      curl_easy_setopt(pdata->curl, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
 
 
      //указываем функцию обратного вызова для записи получаемых данных
      curl_easy_setopt(pdata->curl, CURLOPT_WRITEFUNCTION, writer);
      //указываем куда записывать принимаемые данные
      curl_easy_setopt(pdata->curl, CURLOPT_WRITEDATA, &(pdata->buffer));
      //запускаем выполнение задачи
      pdata->result = curl_easy_perform(pdata->curl);
 
      //проверяем успешность выполнения операции
      if (pdata->result == CURLE_OK)
        {
        string fn(pinfo->NameOfFile);
        ofstream f(fn.c_str());
        if(!f) { MessageBox(pinfo->hwnd, "Can't create file","Error",MB_OK);}
        else   { f<<pdata->buffer<<endl; f.close();}
        }
  }
    else
    {
    //выводим сообщение об ошибке
    MessageBox(pinfo->hwnd, "Can't connect","Error",MB_OK);
    return false;
    }
     
  //завершаем сессию
  curl_easy_cleanup(pdata->curl);
 
  TlsFree(dwTlsIndex);
 
  return true;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru