![]() |
[Delphi] Переключение потоков между собой
Товарищи подскажите как можно переключать патоки между собой: например есть паток T1 он в Memo все время пишет букву `A`, есть поток T2 он в Memo все время пишет букву `B`..... необходимо реализовать так что бы при нажатии на одну кнопку работал поток T1, а при нажатии на другую кнопку - T2..... как это сделать? необходимо ли уничтожать поток T1 перед созданием потока T2 или нет? создавать их когда, одновременно или как?
|
Ну потоковые проги не писал, но ядумаю что пускаешь T1 он выполняется отдаешь квант и не принимаешь его пока не выполнится второй, ну флаг какойнить замути)
|
у кого еще мысли есть?
|
Цитата:
|
уже реализовано....... я просто думаю, по нажатию первой кнопки делать T1.Suspend T2.resume, а по второй кнопке наоборот, но это как то тупо..... может ктонибудь знает нормальный способ?
|
ты каждый поток в ручную создаешь?(T1,T2,T3,...,Tn)? тупо ппц
|
их всего два или три......
а как надо? и переключать все же их как? |
Цитата:
|
Цитата:
А можно поинтересоваться, зачем нужно "переключаться между пАтоками" ? Обычно пОтоки создаются для того, что бы они работали паралельно :) |
...задание такое.
ну может ктонибудь по существу чтонибудь скажет? |
Что бы кто-то что-то сказал по существу, нужно по существу задавать вопрос.
|
Цитата:
Код:
unit TruncThread; |
Цитата:
вот код переводит строки в Spisok.Strings в верхний регистр: Код:
function strcUP(s:string):string;var r:string;k:byte;begin r:=s;for k:=1 to length(r)do begin |
StrToLower/Upper
не понял, зачем такой код лопатить?!?! о_О Касательно потоков. Для чего они нужны? Для параллельной работы. И вот, почитай на досуге, про потоки http://forum.vingrad.ru/forum/topic-60076.html |
как сделать верхний регистр я знаю.... и как наследовать я знаю.... не надо задавать вопросы на счет тупости, задание есть задание, я незадаю лишних вопросов.
субственно суть вопроса - как переключать два потока между собой? |
Цитата:
скажи сразу, не хочу вкуривать, дайте тупо работающий код. |
Потоки могут работать независимо друг от друга.
Создаёшь поток через CreateThread/BeginThread, ссылающийся на нужную тебе функцию, и никаких TThread не надо, да и работать всё будет стабильнее. Код:
... |
intNet спосибо большое конечно, но тут к сожалению вопрос стоит остро и зависит он не от меня, так что реализация на WinAPI не пойдет.....
а на счет вкуривания зря так издеваетесь: http://www.rsdn.ru/forum/delphi/3358361.flat.aspx http://forum.vingrad.ru/forum/topic-60076.html http://digs.alfaspace.net/topics/8 http://www.delphisources.ru/pages/faq/base/threads_development.html http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1370 .................. .....нужен ответ по теме, а не философия |
Цитата:
|
Цитата:
|
_PARAZIT_, сам незнаешь чего хочешь =\
|
делай 1 поток который из глобальной переменной будет брать букву которую писать.
Нажал на одну кнопку, в эту переменную записалась нужная буква Нажал на другую кнопку, в ней записалась другая буква. |
Спасибо всем ответившим.... доверимся опыту zeppe1in и сделаем как было написано выше, добавив небольшой класс управления потоками с реализацией необходимых методов добавления потоков и их переключения.
|
если что, то я не виноват)
|
блин..... дополнительный вопросик возник: как правильно синхронизировать через критическую секцию? у меня к серверу несколько клиентов могут слать одновременно данные, и необходимо сформировать общий список, так сказать, и сихронизировать добавление данных в него с помощью критической секции...
|
далеко не лучший вариант, но просто тока что докодил в своих целях.
Код:
DWORD g_last_time; |
на сях не оч понятно.... :(
вот мой код (что неправельно?): Код:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); |
А вообще синхронизацию очень удобно делать не через критические секции, а через interlockexchenge. Работает очень быстро. Удобно применять в тех случаях когда период ожидания минимальный, но всё таки присутствует.
|
| Время: 10:49 |