> Я чего то про то почему нельзя знать ID и HANDLE вместе так > и не понял > если интересно, посмотри как это было сделано в He4 - > классы > Server,Forward,Control
По правде сказкть я не смотрел классы, но кажется они у меня лежат на винте. Я их посмотрю обязательно. Если не найду дам знать.
Но тут дело в другом. Конечно же мой класс содержит и ID и HANDLE. Но представь ситуацию, когда программеру приспичило Attach-нуть свой HANDLE (не созданный через мой класс). Механизм следующий:
HANDLE hSomeThread;
......
CMyThread thread;
.......
thread.Attach(hSomeThread);
или
CMyThread* pThread = CMyThread::FromHandle(hSomeThread); - тут, если поток не создан моим классом, а через API, то создаст временной сласс с указанным HADNLE, потом удалит его.
Теперь надо сделать постинг
pThread->PostThreadMessage(....);
причем, в большинстве custom мессаг, в качестве LPARAM идет Thread HANDLE. так очень удобно, т.к. через FromHandle() всегда получу указатель на класс.
Так вот, если узер аттачит свой хендл, то мне нужно знать и его ID. Я хотел устроить так, чтобу ID из инфо снимал мой класс, а не узер его давал. Естественн, если что то не устраивает, есть вариант
pThread->m_nThreadId = nMyThreadId;
ID мне нужен был всего лишь для постинга, бельше нигде вроде не применяю.
Но суть в том, что все очень четко работает. Я на одной версии сделал Демо - просто супер. Клиент запускает несколько потоков с сокетами и обмен идет без каких либо проблем. причем не надо иметь приложение с окном, сойдет любое лишь бы Win32 :)) одно хреново,я кажется плотно его связываю с 2К.
Легким движением можно накатать Клиент/Сервер только свои обработчики событий написать надо.
вообщем намерен в дальнейшем на эту технологию посадить окошки, чтобы они в разных потоках без проблем крутились. Но этим на досуге побалуюсь.
Кстати, мне потом надо будет серввер тестировать с большим колчеством клиентов, не знаю че делать.
P.S. если че тут несвязанное накатал, sorry :))) немного спешил, за мыслями не успевал :)))
|