主题:关于tcp回调函数的问题?

  共有24396人关注过本帖    
Rite2009
1楼


关于tcp回调函数的问题?  发帖心情 Post By:2009-10-10 11:17:00   [只看该作者]

我用9260做一个tcp服务器,客户端socket连接通过指令下载我的文件,我做一个OnRead()的回调函数来判断指令并发送相应文件(可能连续发送多个文件)。如果一个文件还没有发送完(也就是回调函数还在执行),另一个连接又来了,要如何做回调函数呢?谢谢,我新手,呵呵~~
我想的是可以在OnRead()回调函数里面动态启动一个或者多个线程,这些个线程专门向不同的连接客户端发送文件,但是不同的连接客户所需要的文件也不同,不知道怎么做,大虾指点~~~

  单帖管理 | 引用 | 回复 回到顶部
zhl
2楼


  发帖心情 Post By:2009-10-10 12:14:00   [只看该作者]

建议tcp服务器可以同时支持多个连接,每建立一个连接就启动一个线程,也就是每个连接都是一个独立的线程,这样便于数据的处理。具体可以参考我们提供的step3_tcptest中相关代码。

  单帖管理 | 引用 | 回复 回到顶部
Rite2009
3楼


  发帖心情 Post By:2009-10-10 13:27:00   [只看该作者]

我现在就是用得step3中的例子做啊,但是我的文件发送程序在回调函数OnRead()里。即使是有多个线程相应不同的链接,但是OnRead()处理函数不是只有一个么?

  单帖管理 | 引用 | 回复 回到顶部
Rite2009
4楼


  发帖心情 Post By:2009-10-10 14:52:00   [只看该作者]

我用hHandle = CreateThread()创建一个线程,当该线程函数执行完毕后退出,是自动关闭该线程么?还需要CloseHandle(hHandle)么?

  单帖管理 | 引用 | 回复 回到顶部
Rite2009
5楼


  发帖心情 Post By:2009-10-10 14:55:00   [只看该作者]

哦,明白了!别人的解释:
-----------------------------------------------------
1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread返回到你CloseHandle()。

2,所有的内核对象(包括线程Handle)都是系统资源,用了要还的,也就是说用完后一定要closehandle关闭之,如果不这么做,你系统的句柄资源很快就用光了。

3,如果你CreateThread以后需要对这个线程做一些操作,比如改变优先级,被其他线程等待,强制TermateThread等,就要保存这个句柄,使用完了在CloseHandle。如果你开了一个线程,而不需要对它进行如何干预,CreateThread后直接CloseHandle就行了。


所以
CloseHandel(ThreadHandle );
只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了。并没有结束线程。

  单帖管理 | 引用 | 回复 回到顶部
x10
6楼


  发帖心情 Post By:2009-10-10 16:37:00   [只看该作者]

谢谢分享关于Handle的描述,:-)

  单帖管理 | 引用 | 回复 回到顶部

返回首页

关于tcp回调函数的问题?

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: