|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:53 pm
Работещ форум за CBuilder в България
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Работещ форум за CBuilder в България
Знам, че на този въпрос не му е тука мястото, но с риска да ме псувате, ще попитам:
Търся работещ форум за CBuilder в България. Преди седмица посетих нещо много интересно, обаче къде се дяна този URL, така е не го намерих. Ако някой знае нещо по въпроса, моля, нека прати някой линк. Tемите да са свързани с програмирането на CBuilder, а не за Visual C++, MFC, OWL или въобще C++.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пон Фев 28, 2005 12:42 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Виждал съм руски, ама Български .... не се сещам
|
| Вто Мар 01, 2005 8:46 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Намерих нещо в Русия, ама е доста постно: http://www.sources.ru/builder/index.html
|
| Вто Мар 01, 2005 5:20 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
|
| Вто Мар 01, 2005 9:43 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
10x, линка наистина си струва.
|
| Сря Мар 02, 2005 7:54 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Тоя C++ Builder ми разказа играта последните 2 месеца. Тъкмо му намеря цаката и се отвори нова пропаст. Сега един дърварски проблем възникна дето се въртя няколко дена и не мога да намеря точното решение. Значи пуснах си TServerSocket като blocking connection. Заработи след дълги мъки стабилно и без да гърми с м-во нишки. Сега обаче не мога да намеря "пролука" в TServerSocket, така че от главната нишка на VCL да му давам "ишерет" че имам данни за изпращане. Приеамам данни от 250 клиента едновременно, та чак пушек се вдига, обаче не мога да намеря начин как да изпращам. Имам една таблица в главната форма от тип TStringGrid, с натискане на десния бутон на мишката се избира даден ред от таблицата, след което се отваря диалогова кутия, в която се попълват данни за изпращане. Е хубаво, ама как да направя така, че моята нишка да разбере, че имам данни за изпращане ? Не може да няма предвидена такава ситуация. Не искам да пиша излишни синхронизации с TEvent или подобните му обекти.
|
| Пон Апр 18, 2005 2:08 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Нишката къв тип е? Седи и чака нещо да пристигне, или се върти непрекъснато, проверявайки буфера?
|
| Пон Апр 18, 2005 2:13 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Нишката се блокирва от функцията WaitForData( CLIENT_WAIT_TIME )
 |  |  |  | Код: while( ! Terminated && ClientSocket->Connected ) // make sure connection is active { if( pStream->WaitForData(CLIENT_WAIT_TIME) ) // give the client CLIENT_WAIT_TIME seconds to start writing { try { // TWinSocketStream->Read() не генерира изключения !!! readBytes = pStream->Read( buffer, sizeof(buffer) ); if( readBytes > 0 ) { // Back again to Client ( echo ) pStream->Write( buffer, readBytes );
// Терминирам буфера с 0, за да стане валиден C низ, защото може и да не e :) buffer[readBytes] = 0;
// Показвам получените данни като HEX message = AnsiString( buffer ); Synchronize( myMemoReceiveHex );
// Показвам получените данни като string message = ClientSocket->RemoteAddress + ":" + IntToStr(ClientSocket->RemotePort) + " - "; message += AnsiString( buffer ); Synchronize( myMemoReceiveAscii );
message += "\n"; Synchronize( WriteToLogFile );
// now process the request //... } else { // Защо трябва да затварям тук socket връзката ? Някаква причина // да има ? Не съм прочел нищо от връзката, но значи ли това, че // не съществува socket връзката. // ::MessageBox(NULL,"Не съм прочел нищо от TWinSocketStream->Read()",szNameOfProgram,MB_OK|MB_ICONINFORMATION); message = TDateTime::CurrentDateTime().DateTimeString(); message += ",ThreadID=" + IntToHex((int)ThreadID,4); message += ", ! pStream->Read(buffer,sizeof(buffer))\n"; Synchronize( WriteToLogFile ); if( ClientSocket->Connected ) ClientSocket->Close(); if( ! Terminated ) Terminate(); } } catch( ESocketError &exception ) { message = TDateTime::CurrentDateTime().DateTimeString(); message += ",ThreadID=" + IntToHex((int)ThreadID,4); message += ", Прихванато изключение в MyServerClientThread.cpp, " + AnsiString(__FUNC__) + " " + exception.Message + "\n"; Synchronize( WriteToLogFile ); if( ClientSocket->Connected ) ClientSocket->Close(); if( ! Terminated ) Terminate(); } } else { // Записвам в лог файла на сървъра, че с дадения клиент връзката // е разкъсана след зададения time out. if( ClientSocket->Connected ) ClientSocket->Close(); if( ! Terminated ) Terminate(); message = TDateTime::CurrentDateTime().DateTimeString(); message += ",ThreadID=" + IntToHex((int)ThreadID,4); message += ", ! pStream->WaitForData(CLIENT_WAIT_TIME)\n"; Synchronize( WriteToLogFile ); }
|  |  |  |  |
|
| Пон Апр 18, 2005 2:27 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Такааа, и искаш същата нишка да праща? 
|
| Пон Апр 18, 2005 2:32 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Единственото за което се сещам, е да направя малък TimeOut в WaitForData, примерно 100ms, и след изтичането му да проверявам обект от тип TEvent, сигнализиран в главната нишка, че имам данни за изпращане. Обаче тук става сложното, трябва в някаква динамична структура от данни, да пазя съответствието кой номер от таблицата ( не номер на ред, а уникален номер за ред от таблицата ) на коя нишка отговаря, за да мога да сигнализирам точно тази нишка. Някакви идеи ?
|
| Пон Апр 18, 2005 2:35 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Тя нишката си изпраща, но само ехо след получни данни, а искам да мога да я карам да изпраща и други данни 
|
| Пон Апр 18, 2005 2:36 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ами най-простото, което може да се направи, без да се налага да задълбаваш и да усложняваш, е да се пращат не точно веднага, а след максимум CLIENT_WAIT_TIME.
|
| Пон Апр 18, 2005 2:38 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Не върши работа, оператора ще се изнерви да чака, трябва веднага да мога да изпращам, защото ще има и данни, които трябва да достигнат до всички клиенти едновремменно ( почти де, в цикъл )
П.П. Навсякъде в Интернет има един единствен глупав пример с блокиращ TServerSocket, който връща ехо. Никъде не намерих нещо по-различно. На какви ли не езици четох: английски, български, френски, руски, само китайския ми се опъна 
|
| Пон Апр 18, 2005 2:41 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Става сложно.  Колко е това CLIENT_WAIT_TIME? Гледал ли си какво става в WaitForData()?
|
| Пон Апр 18, 2005 2:47 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Няма как да видя WaitForData, само декларациите на класа мога да разгледам, останалото е писано на Delphi. CLIENT_WAIT_TIME ще го задавам да бъде от 1 до 3 минути. А бе аз толково време загубих с тия сложни сървъри на Builder, ча като си помисля лошо ми става. Ако бях си ги написал сам, щях да съм свършил досега. То декларации, то свойства, то 15 класа за елементарни неща да се направят с класическите сокети за Windows.
|
| Пон Апр 18, 2005 2:53 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|