請問在thread裡,要如何使用TClientSocket來傳輸資料 |
答題得分者是:tomlee
|
VinceScc
一般會員 發表:1 回覆:0 積分:0 註冊:2002-08-14 發送簡訊給我 |
各位大大,如題目所說,我需要再thread中使用tclientsocket來與另外一台的server connect,並且送收資料.以下是我參考之前的問題與解答所寫的code,但是並不能與server connect,請各位大大幫忙看一下.
//--------------------------------------------------------------------------- __fastcall MyClientThread::MyClientThread(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate=true; Resume(); } //--------------------------------------------------------------------------- void __fastcall MyClientThread::Execute() { TClientSocket * TempClient; for (int i=0;i<FormMain->ComponentCount;i ) { if (FormMain->Components[i]->Name == ("ClientSocket2")) { TempClient = dynamic_cast |
tomlee
一般會員 發表:5 回覆:14 積分:18 註冊:2003-10-11 發送簡訊給我 |
引言: 各位大大,如題目所說,我需要再thread中使用tclientsocket來與另外一台的server connect,並且送收資料.以下是我參考之前的問題與解答所寫的code,但是並不能與server connect,請各位大大幫忙看一下.VCL 的許多元件並不是 Thread Safe 的,也就是說,你不能執行緒裏 直接使用不具多緒安全的 VCL 元件。 你的程式有很多問題,正常網路程式的架構思維方式如下: 一、如果使用 VCL 元件,沒有必要時最好不要用執行緒,大部份的 問題都可以用單緒來解決。 二、確定你了解多緒程式的寫法,例如同步物件(或多工器)的用法,以 及執行緒間的溝通方式。 二、除了少數的例外(具備多緒安全性質者)在執行緒中使用 VCL 元件, 必須以 TThread 中的 Synchronize 的方法呼叫。 三、執行緒間的溝通方式也有很多種,如果在程式第一次跑到就可以確定 在往後不會更動的資訊,儘量使用執行緒內的物件,不要用其他複雜的 方法。//--------------------------------------------------------------------------- __fastcall MyClientThread::MyClientThread(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate=true; Resume(); } //--------------------------------------------------------------------------- void __fastcall MyClientThread::Execute() { TClientSocket * TempClient; for (int i=0;i<FormMain->ComponentCount;i ) { if (FormMain->Components[i]->Name == ("ClientSocket2")) { TempClient = dynamic_cast |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |