Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
Всем привет, вот столкнулся вот с такой проблемкой: сделал так чтобы у синусоиды в потоке обновляются координаты, точнее амплитуда: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. поток запускается по кнопке void Cgrafic1Dlg::MAIN() { vector<double>Y(func(A1,A2,A3,w1,w2,w3,phi1,phi2,phi3,nn,Fd,0)); Draw(frameDC,rect,Y); setka(frameDC,rect); zoom(Y); UpdateData(true); } void Cgrafic1Dlg::OnBnClickedButton1() { Invalidate(); MAIN(); //ofstream fout("2.txt",ios::out); //int a=0; hThread=CreateThread(NULL,0,SPEED,this,0,&id); //ResumeThread(hThread); WaitForSingleObject(hThread,INFINITE); CloseHandle(hThread); } Завершаю по кнопке Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. но когда все мое художество начинает работать, я не могу завершить поток при нажатии кнопки.. потому что экран програмки сильно мерцает, хотя РИСУЮ В ПАМЯТЬ! Помогите пожалуйста как это исправить? время SLEEP уменьшал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 21:13 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
рисую в память так вот: Код: plaintext 1. 2. 3. 4. 5. 6. а вызываю так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 21:30 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
spyker Код: plaintext 1. 2. 3. 4. 5. 6. 7. Данный код означает, что функция будет ожидать завершения потока. Так как внутри функции SPEED бесконечный цикл, то ожидание будет бесконечным. Также это означает, что никакие другие сообщения твоя программа обрабатывать не сможет т.к. ты заблокировал поток с циклом обработки сообщений. Убери вызовы WaitForSingleObject и CloseHandle. Перед созданием потока создай событие (CreateEvent), внутри потока сделай паузы с помощью WaitForSingleObject на созданном событии. Когда нужно завершить поток сигнализируй событие (SetEvent), затем дождись завершения потока с помощью WaitForSingleObject(hThread) и закрывай хендлы потока и события. Про функцию TerminateThread забудь. Она может привести к сложно отлаживаемым проблемам. spykerвремя SLEEP уменьшал! Надеюсь это опечатка и ты хотел сказать "увеличивал"? :) И, вдогонку, что за странный стиль именования функций в заглавном регистре и использование имени MAIN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 23:18 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
Event пока не добавил, почему TerminateThread(hThread,id); будет приводит к неким проблемам? строчку с WaitForSingleObject(hThread,INFINITE); закоментил все работает но мерцание остается вот как мерцание убрать? нигде InvalidateRect не нужно добавлять? а main просто вот так написал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 23:37 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
spykerпочему TerminateThread(hThread,id); будет приводит к неким проблемам? Почему выстрел в голову будет приводить к неким проблемам?.. Мерцание возникает, поскольку рисуется не только твой битмап, но и фон. Подави перерисовку фона - исчезнет мерцание. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 23:41 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
На MSDN пишут про возможные проблемы использования TerminateThread: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686717%28v=vs.85%29.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 02:21 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
spykerEvent пока не добавил, почему TerminateThread(hThread,id); будет приводит к неким проблемам? ...Про потоки читай Джеффри РИХТЕР "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 07:56 |
|
||
|
обновление данных в потоке
|
|||
|---|---|---|---|
|
#18+
spykerпочему TerminateThread(hThread,id); будет приводит к неким проблемам? Потому что поток всегда должен закончиться сам, иначе ты получишь UB, в цикле потока должен быть твой флажок хотя бы который ты будешь дергать чтобы сказать что больше поток не нужен, можно поступить как в бусте обернуть в трай кэтч и и кидать туда эксепшн.terminate служит уже когда ты ничего не можешь сделать а поток надо грохнуть, хэндл потока все равно будут висеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 10:55 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=37999448&tid=2020755]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
219ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 328ms |

| 0 / 0 |
