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怎样实现多线程的主要内容,如果未能解决你的问题,请参考以下文章

delphi中如何实现多线程对Canvas的同时访问

delphi 的多线程问题

delphi 7 做多线程程序,内存不断增加,怎么解决?

delphi 多线程程序中内存不断上升的问题!

delphi线程

DELPHI 线程怎样传递参数?