Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мультипоточность MySQL Client, libmysql.dll 
V
    Опции темы
dvamaster
Дата 23.9.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть не большие наработки

первым делом в основной программе проверяем поддержку мультипоточности с помощью функции mysql_thread_safe
результат 1 - есть поддержка, 0 - нет поддержки

второй шаг вызов my_init, иначе mysql_thread_init выдает критическую ошибку

Код

  if mysql_thread_safe = 0 then
    Exit;
  my_init;


после чего можно создавать потоки

в потоке запускаем

1. mysql_thread_init - первым делом инициируем специфичные данные для конкретного потока в библиотеке
2. mysql_init - затем инициируем структуру PMySQL
3. mysql_real_connect - соединяемся
4. выполняем различный код
5. mysql_close - закрываем соединение
6. mysql_thread_end - освобождаем специфичные данные для конкретного потока в библиотеке

Добавлено через 2 минуты и 48 секунд
Это теория

на практике

Код

procedure TMyThread.Execute;
var
  i: Integer;
  m: PMYSQL;
begin
  if mysql_thread_init <> 0 then
    begin
      n := 'Не инициирован поток';
      Synchronize(MM); // вывод лога
    end;
  m := mysql_init(nil);
  if m = nil then
    begin
      n := 'Не инициирован MySQL';
      Synchronize(MM);
    end;
  if mysql_real_connect(m, 'хост', 'юзер', 'пассворд', 'база', 3306, nil, 0) = nil then
    begin
      n := 'Не инициировано подключение';
      Synchronize(MM);
    end;
  for i := 0 to 100 do
    begin
      if mysql_query(m, 'SELECT * FROM `табличка`') <> 0 then
        begin
          n := 'ошибка в ' + IntToStr(i) + ' цикле';
          Synchronize(MM)
        end;
      Sleep(Random(100)); // для разнобойной работы потоков
    end;
  mysql_thread_end;
  mysql_close(m)
end;


Добавлено через 4 минуты и 8 секунд
Теперь проблемы

почему то выполняются только первые запросы в потоках, остальные выдают ошибку  smile 

что-то я упустил?

Добавлено через 8 минут и 34 секунды
ошибка

Цитата

Commands out of sync; you can't run this command now



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
dvamaster
  Дата 24.9.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



И так ошибка решилась!

Необходимо проверять результат, т.е. использовать mysql_store_result или mysql_use_result

Код

  for i := 0 to 100 do
    begin
      n := 'статус цикла ' + IntToStr(i) + ' [' + mysql_sqlstate(m) + ']';
      Synchronize(MM);
      if mysql_query(m, 'SELECT * FROM `users`') <> 0 then
        begin
          n := 'ошибка в ' + IntToStr(i) + ' цикле [' + mysql_error(m) + ']';
          Synchronize(MM)
        end;
      r := mysql_use_result(m); // вот тут
      mysql_free_result(r);         // не забыть про освобождение памяти
      Sleep(Random(100));
    end;


Это сообщение отредактировал(а) dvamaster - 24.9.2009, 12:11


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


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

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


 




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


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

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