各位好,我做了一个组件,在ASP中调用,但是我发现单个用户使用时,是好使的,但是在多个用户同时使用时就不好使了(COM中的变量值变最后一个用户访问时的值了,可是我希望是每一个用户单独执行COM互不干扰呀?),我想可能是多线程的问题,但是又不知道怎么解决才好,请大家多多指教,谢谢!

解决方案 »

  1.   

    把你的代码里面的全局或者静态变量全部改写成局部变量。记得:如果希望你的OCX/COM能够支持多用户,就绝对绝对不要使用全局或者静态变量!!
      

  2.   

    谢谢: huangbeyond(校园人渣) 
     把代码里面的全局或者静态变量全部改写成局部变量,就行了吗,不用做其他事情吗?
      

  3.   

    to;llm308(大明) 
    话不能说得这么绝对,呵呵。如果是用来记录全局数据的,你就应该把全局变量该为类的对象成员;不是说全部安全照改就可以了还是要看实际情况的,要看你原来定义的全局变量的意义和作用,再保证逻辑不改变的前提下,改为局部变量和类的非静态成员数据。
      

  4.   

    to  zhenxizhou(天上人间) 
    数据库中锁的概念不就类似楼主这样吗。多个用户访问一个内容,并有修改它的权限,那么数据库要怎么保护这个数据,就用了锁的概念。
      

  5.   

    不管你是apartment 还是 free thread 线程组件:
    全局变量总是被所有的客户共享.建议你设置成 单线程公寓模型.
    然后把共享变量类作为类成员.
    这样就可以为每一个客户准备一个copy
      

  6.   

    为每个用户NEW一个COM实例。这是C++的问题而不是COM的问题。COM就是希望多个进程使用同一份COM实例,当然变量值为最后一个用户修改的值。生成多个实例即可。