Delphi怎样实现多线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi怎样实现多线程相关的知识,希望对你有一定的参考价值。
看了下书 没看懂
参考技术A 多线程其实非常简单,DELPHI有多线程的类,你添加即可使用,但是我喜欢自己调用API,方法如下:定义一个函数或者过程,这个函数就是线程要执行的内容,然后调用API就可以不断创建线程,每个线程都单独的执行那个函数,执行完毕线程就自动关闭,下面是我程序里面的部分代码:
下面这个就是线程过程,我的线程传递一个参数,建立的SOCKET
procedure ClientThread(var sock:TSOCKET); stdcall;
var ……;
begin
……
end;
下面是主程序建立服务,等待连接,连接后调用线程进行处理的代码
repeat
iAddrSize := sizeof(client);
sClient := accept(sListen, @client, @iAddrSize);
if sClient=INVALID_SOCKET then
begin
SocketErrorMsg(sClient, 'accept() fail');
break;
end;
writeln('Accepted client: ',inet_ntoa(client.sin_addr),':',ntohs(client.sin_port),' sock=',sClient);
hThread := CreateThread(nil, $1000, @ClientThread, @sClient, 0, dwThreadId);
if hThread=0 then
begin
writeln('CreateThread() fail:',GetLastError);
break;
end;
CloseHandle(hThread);
until false;本回答被提问者采纳
java中怎样实现多线程执行的结果相加
import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;
/**
单独的计算线程,比如计算1...10的相加
@author zhaohb
*/
public class CounterThread extends Thread
private int start;
private int end;
private CyclicBarrier barrier ;
public CounterThread(int id,int start, int end,CyclicBarrier barrier)
this.start = start;
this.end = end;
this.barrier = barrier;
setName("Thread-"+id+" ");
@Override
public void run()
int count = 0;
for(int i=start;i<end+1;i++)
count += i;
Counter.totalCount(count);
try
barrier.await();
catch (InterruptedException e)
e.printStackTrace();
catch (BrokenBarrierException e)
e.printStackTrace();
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
测试类入口
@author zhaohb
*/
public class CounterTest
public static void main(String[] args)
//CyclicBarrier指定了当10个线程运行结束时候,可以进行最后结果展示了
CyclicBarrier barrier = new CyclicBarrier(10,new TotalTask(new Counter()));
ExecutorService executorService = Executors.newCachedThreadPool();
for(int i=0;i<10;i++)
int start = i*10+1;
int end = start + 9;
CounterThread counterThread = new CounterThread(i,start, end,barrier);
executorService.execute(counterThread);
executorService.shutdown();
/**
线程结果计算:将单独的线程的计算的结果相加,汇总的到总的结果
@author zhaohb
*
*/
class Counter
private static int count =0;
public synchronized static int totalCount(int perCount)
count += perCount;
return count;
public int totalResult()
return count;
/**
最后结算展示线程
@author zhb
*
*/
class TotalTask implements Runnable
private Counter counter ;
public TotalTask(Counter counter)
this.counter = counter;
@Override
public void run()
System.out.println("所有线程运行完毕,总结果为:");
int total = counter.totalResult();
System.out.println(total);
参考技术A 定义一个成员变量,在线程里加到成员变量里就好了。追问
我找到题目的答案了,要吗?
追答可以啊。
追问你可以上book.boxuegu.com/java上去下载
追答嗯
以上是关于Delphi怎样实现多线程的主要内容,如果未能解决你的问题,请参考以下文章