| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > согласованная робота двух приложен. |
| Автор: Step 25.2.2003, 19:37 |
| у меня два приложения одно записывает результаты в лист бох, а другое их обрабатывает в первом помещаю в листбокс запись и отпровляю сообщение второму приложению об изминении второе приложение обрабатывает должно обрабатывать изминения, но изменеия на момент обработки на самом деле еще не произошли хотя в первом приложении инсетрстринг уже выполненно. Как дождаться действительного изминения в листбоксе, что бы только после него отправить соответсвующее сообщение? Команду слееп ставить не хочется. и циклы проверки тоже запускать не желаю.. |
| Автор: AntonSaburov 26.2.2003, 00:06 | ||
Так ответить не получится - давай код посмотрим ?
И все-таки "изменения" |
| Автор: Step 26.2.2003, 00:16 |
| код прост [CODE] 1 поток a.insertstring(......); soc.Send(...) // передается сообщения в другое поток, в данном случае поток т.к. пример проще, да сообщения в другой поток по сети кидается, не надо удивляться 2 поток онресейве(...) { перебор записей в цикле, но последней записи не находит т.к. последняя запись долго запихивается через инсерт стринг, по профилингу инсерт стринг берет 6 процентов всего времени программы, а по сети пакет проходит даже быстрее чем вставляется запись. } |
| Автор: AntonSaburov 26.2.2003, 01:28 |
| Давай по шагам: a.insertstring() - она у тебя, как я понимаю, асинхронная. Так ? Пока строка вставляется ты посылаешь сообщение другому приложению. И вот это второе приложение откуда берет список строк ? |
| Автор: Step 26.2.2003, 01:33 |
| из первого приложения, каким макаром я получаю указатель на лист бокс не спрашывай... |
| Автор: AntonSaburov 26.2.2003, 01:39 |
| А ты не хочешь сделать некий callback, который будет вызываться тогда, когда строка реально будет вставлена ? Ну и там уже посылать сообщение. Или эта функция тебе не подвластна вообще ? Если так, то лучше чем остановиться до появления строки в списке, я не вижу. |
| Автор: Step 26.2.2003, 01:48 |
| вопрос в том как узнать что она уже добавленна, лист бок сообщения такого не дает и инсерт стринг работу моей функции не преостанавливает кстати такая проблема возникает и при работе с бд через сеть |
| Автор: AntonSaburov 26.2.2003, 19:59 |
| Ну тогда элегантного решения похоже нет. Можно передавать в Send параметры вставляемой строки а во втором приложении входить в цикл ожидания пока строка не появиться в списке. Но это тоже решение не очень. |
| Автор: Step 26.2.2003, 20:25 | ||
|
| Автор: AntonSaburov 26.2.2003, 20:30 | ||
Это точно. На базах данных такое встречается регулярно. Вот и задумаешься о среднем слое, который такие вещи умеет. Нет в этом мире совершенства Может оно и к лучшему. Иначе остались бы мы без работы |
| Автор: Step 26.2.2003, 20:34 |
| AntonSaburov а что ты думаеш о сообщении вм_чендж класса внд, может оно поможет, только я еще не могу это проверить, может ты выскажеш свои соображения |
| Автор: keisik 27.2.2003, 00:28 |
| А есть такой вариант (правда, через одно место): меняешь лист бокс на лист контрол и изголяешься над колбэковой функцией сортировки, которая вызывается для пересортировывания элементов после добавления нового. |
| Автор: Step 27.2.2003, 00:46 |
| keisik правда, что через жопу, но видать идея подходящая, буду пробывать, спасибо |
| Автор: keisik 27.2.2003, 01:36 |
| По большому счёту там можно обойтись минимум извращений - при добавлении нового элемента можно ловить и обрабатывать LVN_ITEMCHANGED. |
| Автор: Step 27.2.2003, 02:09 |
| keisik спасибо, но это решение справедливо только для конкретного случая, а хотелось бы знать что дядя Били по этому поводу придпринял.... |