Createthread(nil, 0, @MyThreadFun, @p, 0, Id); // 创建线程,注意这里不是阻塞的,启动线程后就直接执行下一句代码了
memo1.Text:=som; // 执行时上面那个线程可能还没执行结束
你可以理解为,线程中的代码和 memo1这句是同时执行的,所以som的结果并不可预知
thread := Createthread(nil, 0, @MyThreadFun, @p, 0, Id);
WaitForSingleObject(thread) // 等待线程执行结束
memo1.Text:=som; // 这样就对了,但失去了多线程的意义