是这样的:我改别人的源码,是抢号软件他是这样弄的:
10个线程负责根据不同的条件扫不同的号,15个线程负责买号。10个扫号线程扫号,扫到的号放入一个TstringList公共变量中。买号线程不停的从该变量取号进而买号。现在的问题是 不够快!我觉得问题是:扫到的号add放进tstringlist中,扫号速度远远大于买号速度,这样,买号线程从tstriglist中取号时取得号很可能已经被别人买过了,我怎样才能取号的时候取最新的号?扫到的号放进一个什么类型的变量中,买号线程根据索引顺序的取号,才能取到最新号?或者你有什么不同的看法,都发表一下

解决方案 »

  1.   

    你目前的设计,不太合理,算起来有25个线程访问同一个stringlist。
    1、考虑线程安全问题,需要处理“锁”或临界区——从你的描述看,似乎你的代码并未做此处理;
    2、由于频繁的“锁”或临界区处理,就有大量的系统调用(用户态转系统态需要占用CPU)而降低整体程序性能;
    3、线程优先级的考量:扫号线程和买号线程优先级是否应有所区分?
    建议这样设计:
    1、扫号线程处理处理结果都提交给一个“号码提交线程”,该线程负责写入TStringList;
    2、买号线程不直接访问TStringList取号,而统一通过“取号线程”访问TStringList取号后,逐一给每个买号线程发放号码;这只是大致流程,里面还有好多细节需要考虑:比如取号后是否需要remove,是否需要判断重复号等等。有些细节可能会影响性能。
      

  2.   

    多线程下,要以 Tthreadlist 取代 stringlist