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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2012, 01:52   #21
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Ну надо же, и таймер у них есть, и TThread.
Вот, надо где-то в его свойствах задать интервал времени в миллисекундах.
И наверное, подобно тому, как у кнопок есть метод/событие Click (или что там есть)
так и у таймера есть событие которое будет выполнятся каждые N миллисекунд.
В теле его метода рисуем.
Одна кнопка стартует таймер, другая его гасит.
Я стал этим замарачиватся ибо в инсте в одну каску красивую прогу не напишешь. кста у мну беда твой метод юзнул всё айс, только параметр не отсылает.. но я ща решу этот вопрос мигом.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 01:56   #22
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
только параметр не отсылает.
Но ты имей ввиду, параметр в новом потоке надо скопировать прежде, чем завершится функция вызвавшая новый поток.
EUGY вне форума Ответить с цитированием
Старый 29.12.2012, 02:15   #23
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Но ты имей ввиду, параметр в новом потоке надо скопировать прежде, чем завершится функция вызвавшая новый поток.
Поправил, но трабла оказалась теперь в ином.. мне надо поймать момент, когда потоку пришёл конец.. я должен предупредить пользяшку.. в качестве себя хотя бы смс уведомлением)) но в потоке незя такое делать.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 02:32   #24
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
когда потоку пришёл конец..
WaitForSingleObject ?
EUGY вне форума Ответить с цитированием
Старый 29.12.2012, 02:45   #25
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
WaitForSingleObject ?
я мило обошёлся без синхронизации... поток я могу вынести в методе потока он мне не слова не пикнет. но отправить с того метода, что всё гитлер капут.. vcl не кушает... ибо зараза она однопоточная. наверное можно как то айпишкой или нужна идея...

короче в PostAnsyEx я делаю поток. кидаю данные. врубаю ресум.
метод потока исполняется. я это вижу. ибо идёт запись в файл, но как поймать момент когда всё... пора есть памедоры... вот это вопрос.

код делфяки, модеры не судите строго. один хрен в бсб тоже самое.
Код:
function ThreadFunc(Data: Pointer): Cardinal;
begin
  case AnsyData.Types of
    Post1: begin ThIdHTTPEx.PostEx(AnsyData.Url, AnsyData.Request, AnsyData.SSL); end;
    Post2: begin ThIdHTTPEx.PostEx(AnsyData.Url, AnsyData.Request,
                             AnsyData.Stream, AnsyData.SSL); end;
    Get1: begin ThIdHTTPEx.GetEx(AnsyData.Url, AnsyData.SSL); end;
    Get2: begin ThIdHTTPEx.GetEx(AnsyData.Url, AnsyData.Stream, AnsyData.SSL); end;
  end;

  if Assigned(ThIdHTTPEx.OnEnd) then ThIdHTTPEx.OnEnd(ThIdHTTPEx);
  // как помнишь Енд должен вызвать функцию пользователя о завершении..

  __CheckError(GetExitCodeThread(HThread, IdThread),
               'TIdHTTPEx.PostAnsyEx_1 error GetExitCodeThread()');
  ExitThread(IdThread);
   __CheckError(CloseHandle(HThread), 'TIdHTTPEx.PostAnsyEx_1 error CloseHandle()');
  Result := 0;
end;
//-------
Hook для модераторов
Код:
DWORD ThreadFunc(LPVOID Data);
{
   switch(AnsyData.Types)
   {
    case Post1: ThIdHTTPEx->PostEx(AnsyData.Url, AnsyData.Request, AnsyData.SSL); break;
    case Post2: ThIdHTTPEx->PostEx(AnsyData.Url, AnsyData.Request,
                             AnsyData.Stream, AnsyData.SSL); break;
    case Get1: ThIdHTTPEx->GetEx(AnsyData.Url, AnsyData.SSL); break;
    case Get2: ThIdHTTPEx->GetEx(AnsyData.Url, AnsyData.Stream, AnsyData.SSL); break;
   }

  if(ThIdHTTPEx.OnEnd != NULL) ThIdHTTPEx->OnEnd(ThIdHTTPEx);
  // как помнишь Енд должен вызвать функцию пользователя о завершении..

  __CheckError(GetExitCodeThread(HThread, &IdThread),
               "TIdHTTPEx.PostAnsyEx_1 error GetExitCodeThread()");
  ExitThread(IdThread);
   __CheckError(CloseHandle(HThread), "TIdHTTPEx.PostAnsyEx_1 error CloseHandle()");
  return 0;
}
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 29.12.2012 в 02:59.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 03:05   #26
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

То есть тебе нужно уведомить главный поток о чем-то произошедшем в другом потоке?
Самое железное - PostMessage с новым WM_. Оно автоматом обработается главным циклом в основном потоке.
EUGY вне форума Ответить с цитированием
Старый 29.12.2012, 03:11   #27
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
То есть тебе нужно уведомить главный поток о чем-то произошедшем в другом потоке?
Самое железное - PostMessage с новым WM_. Оно автоматом обработается главным циклом в основном потоке.
Да это я знаю.... фишка в том, что этот класс выполняется в другом классе под кодовым именем TVkClass. а тот класс общается с главным =(
это уж если совсем в крайность =(
//----
я хочу чтоб модуль выполнял всё сам и никого не подключал дополнительно.. минимум зависимостей.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 29.12.2012 в 03:15.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 03:23   #28
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну не знаю, я бы разрулил.

То есть как я тебя понял: Из нового потока ты не можешь вызвать метод класса, так как vcl в этом тебя ограничивает. Значит, надо вызвать этот метод в главном потоке.
И в чем проблема, окном ловишь уведомление и вызываешь метод нужного класса.

И даже окно не нужно. До цикла GetMessage сможешь докапаться? Вроде в делфи он где-то в классе Appliction.
EUGY вне форума Ответить с цитированием
Старый 29.12.2012, 03:33   #29
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Ну не знаю, я бы разрулил.

То есть как я тебя понял: Из нового потока ты не можешь вызвать метод класса, так как vcl в этом тебя ограничивает. Значит, надо вызвать этот метод в главном потоке.
И в чем проблема, окном ловишь уведомление и вызываешь метод нужного класса.

И даже окно не нужно. До цикла GetMessage сможешь докапаться? Вроде в делфи он где-то в классе Appliction.
В потоке при помощи апи можно рисовать до умро помрочения...
смотри чё я делаю
Переважу на си, дабы меньше ко мне претензий.
Код:
int TVkClass::GetUserMusicCount(void)
{
  f = new TFileStream("test.html", fmCreate);
  http->OnEnd = DoDownloadEnd;
  http->GetAnsyEx("http://vk.com", f);
}

void TVkClass::DoDownloadEnd(TObject* ASender)
{
  delete f;
  ShowMessage("End");    <-- вот тут его нагинает.... типо канва в запрете. canvas does not allow drawing.
}
можно конечно отказаться от исполнения vcl впринципе. но а если
я врублю WindowsMediaPlayer ???? так не пойдёт
нужно лишь придумать, как уничтожить поток и вызвать эту функцию вне метода потока.. иначе разрулить как собственно не вижу. ну самим модулем.
//-----
слушай стоп.....
в конце метода потока.. нужно всегда возвращать 0.
как мне его получить.... эту заразу???
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 29.12.2012 в 03:48.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 04:06   #30
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
слушай стоп.....
в конце метода потока.. нужно всегда возвращать 0.
как мне его получить.... эту заразу???
Не знаю как в классах, а вообще через GetExitCodeThread.
Только почему "всегда 0". Можно вернуть хоть телефон бабушки.)
EUGY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04