|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.03.2011, 23:10 | #1 |
Пользователь
Регистрация: 12.10.2010
Сообщений: 19
|
Потоки и StringGrid
Здравствуйте. Извиняюсь, если данную тему надо было писать в раздел WIN API, а не сюда.
Задача состоит в следующем в одном потоке ArTheads[0] построчно заполняюю StrGr_Data. Затем подсчитываю срдеене арифметическое строки и вношу его в StrGr_SumData другим потоком ArTheads[1]. Синхронизация потоков идет с использованием объекта события E2. Код:
Что я делаю не так, и как разрешить данную проблему? Использование глобальной переменной счетчика i и запись с использованием Synchronize приводит к аварийному завершению работы приложения. И еще вопрос: возможно ли использование 4х потоков, а не двух: т.е. 1 поток - 1 столбец. И как это реализовать? Ведь в конструкторе потока указывается один и тот же объект StringGrid - т.е. как разграничить-то по столбцам? Заранее спасибо. |
29.03.2011, 23:49 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
1) работать с VCL можно только в главном потоке. Без Synchronize() ваша прога будет падать, вопрос просто времени, когда именно.
2) "Синхронизация потоков идет с использованием объекта события E2." Ничего никуда у вас не идёт. Оба потока фигачат данные в ArNum[] одновременно. > как разрешить данную проблему? для начала объясните, что вам нужно. И прочитайте книжку какую-то по мультипоточным приложениям. Сейчас самое простое — весь ваш код переписать заново с нуля. > возможно ли использование 4х потоков хоть 50 > т.е. как разграничить-то по столбцам? передавать номер столбца
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
30.03.2011, 18:57 | #3 |
Пользователь
Регистрация: 12.10.2010
Сообщений: 19
|
Тема, в принципе, не актуальна, тк реализовал задачу c использованием средств API.
Спасибо за комментарии. |
30.03.2011, 18:59 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
покажите свое решение, а то такое чувство что вы потоки с нуля написали, и просто отсрочили падение.(иль просто скажите что использовали)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
03.04.2011, 17:55 | #5 | |
Пользователь
Регистрация: 12.10.2010
Сообщений: 19
|
Цитата:
Код:
|
|
03.04.2011, 18:03 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
хвалю, все верно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
03.04.2011, 18:07 | #7 |
Пользователь
Регистрация: 12.10.2010
Сообщений: 19
|
Благодарю
|
03.04.2011, 18:19 | #8 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Код:
|
03.04.2011, 18:30 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
основной метод это WriteSymData, именно в нем и реализована синхронизация, по названиям я полагаю что остальные используются именно внутри нее.
кстати поправочка, лучше поставьте событие с автосббросом, и убрать все SetEvent оставив лишь после цикла ResetEvent хотя, мне не нравится что хоть эвентами и защитили грид, но главный поток по прежнему берет данные когда надо. тут всетаки гораздо лучше синхрониз для обновления использовать(только для обновления) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 03.04.2011 в 18:59. |
03.04.2011, 19:08 | #10 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
Судя по объявлению Код:
В ее теле я в упор не вижу никакой синхронизации. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
stringgrid+колесо мыши=>stringgrid.onclick | aalleexxaa | Общие вопросы Delphi | 5 | 16.02.2011 16:58 |
Потоки | fredwriter | Общие вопросы Delphi | 20 | 13.11.2010 04:16 |
Потоки | Coder86 | Общие вопросы Delphi | 12 | 09.06.2010 23:12 |
потоки | пауэрлифтинг | Общие вопросы Delphi | 5 | 23.05.2010 14:19 |
Потоки | StudeHt | Помощь студентам | 1 | 06.05.2010 16:26 |