我对线程不是太了解,先说明一下我的用途:
   程序中有三个线程,可能会同一时间运行,我现在是这样写的
function tmyabc():string;stdeall;
...function tmyhhh():string:stdeall;
...function tmyaaa(sql:string):string:stdeall;
...调用:
var
   htabc:thandle;
   threadid:dword;
   sql:string;
begin
    try
       thabc:=createthread(nil,0,@tmyabc,sql,0,threadid);
       if thabc=0 then
          showmessage('没有线程'); 
    finally
       closehandle(thabc);
    end;
end;
三个方法基本上是一样的,现在出现异常出错,不能同步?这样的错误提示!!
能告诉我该怎么办吗???很急!!

解决方案 »

  1.   

    不知道你不能同步是什麼意思??
    如果是不能同步訪問公共變量出錯, 可用 Synchronize 或其它 信號量 之類來保證同步不出錯!!
      

  2.   

    有时是这样的提示:
    “Canvas does not allow drawing”
    "access violation at 0x00d1cc14: write of address 0xff2e3353"
    "在对应所需名称或序数的集合中,未找到项目"
    按顺序出错
      

  3.   

    可以用互斥体,临界区,信号量和事件等内核对象来实现线程之间的数据同步.具体请参考MSDN.
      

  4.   

    我在MSDN中的英文太累(E文不好:))
    请给源码行吗
      

  5.   

    经我测试,当我的一个tmyaaa线程在运行时,其它线程一运行就说异步运行出错?!
    tmyaaa中是一个数据库处理,一运行,CPU基本上是100%
      

  6.   

    VCL 中涉及到 GUI 的组件不是线程安全的,因此线程函数中不要用到它们,例如 TForm 等等。