主題:關于tcp回調函數的問題? 共有40878人關注過本帖 |
---|
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的描述,:-)
|
|
單帖管理 | 引用 | 回復 |