Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Таймер в потоке?

317
03 октября 2002 года
Relax
573 / / 20.09.2000
создаю таймер в потоке, но когда тикает и начинает выполняться код, то основное приложение замирает, хотя это и другой поток - в чем глюк?
250
04 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Relax
создаю таймер в потоке, но когда тикает и начинает выполняться код, то основное приложение замирает, хотя это и другой поток - в чем глюк?


А как ты его создаешь.. ?

317
04 октября 2002 года
Relax
573 / / 20.09.2000
через new...
250
04 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Relax
через new...


незнаю что за new такое для создание нового потока поробуй использовать:
_beginthead

317
04 октября 2002 года
Relax
573 / / 20.09.2000
как что за new?

TTimerThread *TimerThread = new TTimerThread(false);

ты предлагаешь API юзать? VCL как-то сподручнее... но все равно попробую. ;)
746
04 октября 2002 года
Galin
9 / / 20.01.2000
Есть книга по Бильдеру
Автор Шамис

Там в одном месте разбирается,
как сделать таймер, в отдельном потоке,
чтобы он хорошо работал.

При желании и книгу, и тексты программ к ней
можно найти в Инете

Если не получится - пиши -помогу
Там все делается, насколько я помню,
без API
317
04 октября 2002 года
Relax
573 / / 20.09.2000
да можно и с API - даже эффективнее получится - мне хочется сам принцип понять почему таймер не работает... сам поток работает как надо - параллельно, а вот таймер запускается как будто в главном потоке приложения...
475
09 октября 2002 года
Winnie
90 / / 20.03.2000
Цитата:
Originally posted by Relax
да можно и с API - даже эффективнее получится - мне хочется сам принцип понять почему таймер не работает... сам поток работает как надо - параллельно, а вот таймер запускается как будто в главном потоке приложения...



А он скорее всего там и создается :) наскока я помню таймер в винде (тот который WM_TIMER сообщение посылает) привязывается к окну... соответсвенно билдер скорее всего создает его на основе главного окна (или какого-нить временно-созданного) и посылает в тред сообщения....

Хотя могу и все путать... см. исходники VCL

317
10 октября 2002 года
Relax
573 / / 20.09.2000
да - наверное так и есть... поглядим.
250
10 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Relax
да - наверное так и есть... поглядим.



А ВКЛ разве в исходниках.. ? ? ?

475
10 октября 2002 года
Winnie
90 / / 20.03.2000
Цитата:
Originally posted by Joker


А ВКЛ разве в исходниках.. ? ? ?



смотря какую поставку билдера ставить :)
в энтерпрайзе вроде в исходниках

317
10 октября 2002 года
Relax
573 / / 20.09.2000
да - в энтерпрайзе есть - подкаталог Source...
2.1K
10 октября 2002 года
kmn
29 / / 09.10.2002
Цитата:
Originally posted by Relax
создаю таймер в потоке, но когда тикает и начинает выполняться код, то основное приложение замирает, хотя это и другой поток - в чем глюк?



Таймер создается для конкретного окна. окно принадлежит потоку.=>

1. Создай окно в новом потоке.

2. Создай таймер

3. Цикл обработки сообщений.

-------------пример------------
DWORD __stdcall TimerThreadProc(void * p)
{
HWND hwnd = ::CreateWindow(...);

::SetTimer(hWnd, 100, NULL);

MSG msg;
while (::GetMessage(&msg, NULL, 0, 0))
::DisptchMessage(&msg)

}

// цикл обработки сообщений нужен обезательно, даже если использовать TimerProc

// и вообще все это-же можно сделать по другому

DWORD __stdcall TimerThreadProc(void * p)
{
while( bContinue )
{
::Sleep(dwDelay);
// .....
// Do anithing

}
}

// P.S Главное забыть за VCL

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог