谁有多线程代码!!我想实现10个线程同时执行一个方法!

问题描述

我想10个线程同时执行一个方法,但是每个方法传入的参数是不一样的!我在网上找了些代码,但是不行,造成线程混乱,谁能教教我啊!!想要实现的是:10个线程同时去登陆网站,然后采集东西。当然我也有10个用户名。10个线程每个线程对应一个用户。

解决方案

解决方案二:
分太少了。不然老夫贴出来
解决方案三:
ThreadPool.QueueUserWorkItem();
解决方案四:
给你个多线程的例子privatevoidbtnDataUp_Click(objectsender,RoutedEventArgse){Threadthread=newThread(GetDataUp);//创建一个线程其中GetDataUp是该线程要执行的方法thread.Start();//该线程运行无论上述线程是否执行完毕都继续执行一下代码lblUpdateMessage.Visibility=Visibility.Visible;}privatevoidGetDataUp(){//执行的代码Actionaction;//封装一个方法该方法不具备参数并且不返回值action=()=>{//执行的代码};btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle,action);//关联的线程上异步执行委托执行Action方法}

解决方案五:
publicabstractclassBaseProcessor{publicBaseProcessor(){m_SyncEvents=newSyncEvents();m_Thread=null;m_ExitTimeOut=500;m_WorkTimeOut=System.Threading.Timeout.Infinite;m_IsPause=false;m_IsStoping=false;m_ThreadName="";}publicBaseProcessor(intexitTimeOut,intworkTimeOut){m_SyncEvents=newSyncEvents();m_Thread=null;m_ExitTimeOut=exitTimeOut;m_WorkTimeOut=workTimeOut;}publicBaseProcessor(intexitTimeOut){m_SyncEvents=newSyncEvents();m_Thread=null;m_ExitTimeOut=exitTimeOut;m_WorkTimeOut=System.Threading.Timeout.Infinite;}publicboolIsPause{get{returnthis.m_IsPause;}}publicboolIsStoping{get{returnthis.m_IsStoping;}}publicvirtualvoidStart(){this.m_ExitObject=newExitObject();this.m_ExitObject.Reset();this.m_ExitObject.name=this.ThreadName;m_IsPause=false;m_IsStoping=false;if(m_Thread==null||!m_Thread.IsAlive){m_Thread=newThread(newThreadStart(this.DoWork));if(this.ThreadName!=string.Empty){m_Thread.Name=this.ThreadName;}this.SyncEventsHandle.ExitWaitHandle.Reset();m_Thread.Start();}m_SyncEvents.WorkWaitHandle.Set();}publicvirtualvoidDoNextStep(){m_SyncEvents.WorkWaitHandle.Set();}publicvirtualvoidStop(){m_IsStoping=true;if(m_Thread==null)return;try{this.BeforeStoping();this.SyncEventsHandle.ExitWaitHandle.Set();if(!m_Thread.Join(500)){m_Thread.Abort();}}catch(System.Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message.ToString());}this.m_Thread=null;}publicvirtualvoidPause(){m_IsPause=true;}publicSyncEventsSyncEventsHandle{get{returnm_SyncEvents;}}publicintExitTimeout{get{returnm_ExitTimeout;}set{m_ExitTimeout=value;}}publicintWorkTimeout{get{returnm_WorkTimeout;}set{m_WorkTimeout=value;}}publicstringThreadName{get{returnthis.m_ThreadName;}set{m_ThreadName=value;}}publicclassSyncEvents{publicenumEventType:int{Exist=0,Work=1,}publicSyncEvents(){m_ExitEvent=newEventWaitHandle(false,EventResetMode.ManualReset);m_WorkEvent=newEventWaitHandle(false,EventResetMode.AutoReset);m_EventArray=newEventWaitHandle[2];m_EventArray[0]=m_ExitEvent;m_EventArray[1]=m_WorkEvent;}publicEventWaitHandleExitWaitHandle{get{returnm_ExitEvent;}}publicEventWaitHandleWorkWaitHandle{get{returnm_WorkEvent;}}publicEventWaitHandle[]EventHandleArray{get{returnm_EventArray;}}privateEventWaitHandlem_ExitEvent;privateEventWaitHandlem_WorkEvent;privateEventWaitHandle[]m_EventArray;};privatevoidDoWork(){this.BeforeStart();intWaitResult;WaitResult=EventWaitHandle.WaitAny(this.SyncEventsHandle.EventHandleArray,m_WorkTimeOut,true);while((WaitResult==(int)SyncEvents.EventType.Work)||(WaitResult==EventWaitHandle.WaitTimeout)){if(!m_IsPause){if(!DoProcessor()){this.m_ExitObject.reason=PublicDefineDll.Enums.EExitReason.Finished;break;}}WaitResult=EventWaitHandle.WaitAny(this.SyncEventsHandle.EventHandleArray,m_WorkTimeOut,true);}if(WaitResult==(int)SyncEvents.EventType.Exist){this.m_ExitObject.reason=PublicDefineDll.Enums.EExitReason.UserAbort;}this.BeforeExit(this.m_ExitObject);}protectedabstractboolDoProcessor();protectedvirtualvoidBeforeExit(ExitObjecteo){System.Diagnostics.Debug.WriteLine(eo.ToString());}protectedvirtualvoidBeforeStart(){System.Diagnostics.Debug.WriteLine("ThreadStart:"+this.ThreadName);}///<summary>///在线程退出信号量有效之前的处理操作,不受退出时限限制///如果退出出时要做很长的耗时操作,重载这个函数实现///但由于这个函数很可能是主线程调用,因此要考虑同步和阻塞问题///</summary>protectedvirtualvoidBeforeStoping(){System.Diagnostics.Debug.WriteLine("Threadstoping:"+this.ThreadName);}protectedSyncEventsm_SyncEvents;protectedThreadm_Thread;protectedintm_ExitTimeout;protectedintm_WorkTimeout;protectedboolm_IsPause;protectedstringm_ThreadName;protectedExitObjectm_ExitObject;protectedboolm_IsStoping;publicclassExitObject{publicExitObject(){this.Reset();}publicvoidReset(){this.exitCode=-1;this.reason=PublicDefineDll.Enums.EExitReason.Invalid;this.description=string.Empty;this.name=string.Empty;}publicoverridestringToString(){StringBuildersb=newStringBuilder();sb.Append("ThreadName:");sb.Append(this.name);sb.Append("Reason:");sb.Append(this.reason.ToString());sb.Append("Description:");sb.Append(this.description);sb.Append("ExitCode:");sb.Append(this.exitCode.ToString());returnsb.ToString();}publicstringname;publicintexitCode;publicPublicDefineDll.Enums.EExitReasonreason;publicstringdescription;}}

老夫心好啊。贴的是可以重用的线程类。内部用内核对象实现。可以实现2种模式1事件驱动模式:每次调用DoNextStep执行一次.把workTimeOut设置到最大就可以2循环模式:每过一定时间,循环执行。3用户自己实现DoProcessor()接口,完成工作。returntrue继续returnfalse退出CMyThread:publicCBaseProcessor{publicCMyThread()::base(200,500){//200线程退出最大等待时间;//500线程每次执行等待时间}protectedoverrideboolDoProcessor(){返回true继续转。返回false退出。}}
解决方案六:
我现在也遇到和楼主相似的问题,请问楼主解决与否?!请指教~~~~~
解决方案七:
好东西不少

时间: 2024-08-30 11:57:18

谁有多线程代码!!我想实现10个线程同时执行一个方法!的相关文章

android-我想要在安卓oncreate中的一个方法在以后进入app中只被调用一次,下次进app不调用

问题描述 我想要在安卓oncreate中的一个方法在以后进入app中只被调用一次,下次进app不调用 onCreate中有一个方法,第一次进入app被调用,以后进去都不被调用怎么做啊.求帮忙啊 解决方案 你可以保存一个标识到本地,然后第二次打开的时候判断即可. SharePreference 解决方案二: 很简单,用sharepreference存储一个变量,第一次调用后置为false,以后再进发现是false就不调用 解决方案三: 持久化一个本地数据,每次进入做一次对比即可

java-我想输进来“1”,就执行a1方法,输进来“2”,就执行a2方法,怎么弄?根据方法名做判断

问题描述 我想输进来"1",就执行a1方法,输进来"2",就执行a2方法,怎么弄?根据方法名做判断 我想输进来"1",就执行a1方法,输进来"2",就执行a2方法,怎么弄?根据方法名做判断 有很多个这样的方法,不想一个一个写 解决方案 不嫌麻烦的话用反射可以实现你所需要的效果: import java.lang.reflect.Field; import java.lang.reflect.Method; import jav

C# 10个线程并发执行Halcon图像算法 报“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

问题描述 如题,这个问题我已经纠结了快三个工作日了.我不同WinFrom程序一起动就会开启10个线程,并发对10张图片进行算法处理,问题是只要程序一起动就会报"尝试读取或写入受保护的内存.这通常指示其他内存已损坏."异常.我试过将8个线程停掉,只开两个,发现没有问题,开三个四个偶尔会出问题....反正10个一个开是一定会报异常的.开起来好像是线程开太多CPU反应不过来导致的问题,可是CPU反应不过来就会报"尝试读取或写入受保护的内存.这通常指示其他内存已损坏."异常

Python多线程编程(二):启动线程的两种方法_python

在Python中我们主要是通过thread和threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用threading模块实现多线程编程.一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行:另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里. 将函数传递进Thread对象 复制代码 代码如下: '''  Cr

页面加载完后自动执行一个方法的js代码_javascript技巧

1.在body中用onload: <body onload="myfunction()"> 2.在脚本中用window.onload: <script type="text/javascript"> function myfun() { alert("this window.onload"); } /*用window.onload调用myfun()*/ window.onload=myfun;//不要括号 </scr

Java 并发/多线程教程(七)-创建和启动java线程

      本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 创建和启动线程 在java中创建一个线程如下: Thread thread = new Thread(); 调用方法start()来启动一个线程: thread.start();         这个例子没有指定线程执行任何代码,线程将会在启动之后停止.         有两种方式指定线程应该执行什么代码.第一种方式就是创建一个Thread的子类并覆写run()方法.第

《C++多线程编程实战》——2.10 在内核实现线程

2.10 在内核实现线程 整个内核就是一个进程,许多系统(内核)线程在其上下文中运行.内核有一个线程表,跟踪该系统中所有的线程. 内核维护这个传统的进程表以跟踪进程.那些可以阻塞线程的函数调用可作为系统调用执行,这比执行系统过程的代价更高.当线程被阻塞时,内核必须运行其他线程.当线程被毁坏时,则被标记为不可运行.但是,它的内核数据结构不会受到影响.然后在创建新的线程时,旧的线程将被再次激活,回收资源以备后用.当然,也可以回收用户级线程,但如果线程管理开销非常小,就没必要这样做. 准备就绪下面的示

java-JAVA 我想在10到1000之间打印各个数位之和为5的数字,这样写有什么错,新手求大神指点

问题描述 JAVA 我想在10到1000之间打印各个数位之和为5的数字,这样写有什么错,新手求大神指点 public class Demo1 { public static void main(String []args){ int n=10; int t=n; int sum=0; while(t<=1000) { t++; sum=sum+t%10; t=t/10; } if(sum==5) { System.out.println(""各个数位之和为5的有:"&q

jQuery代码性能优化的10种方法_jquery

1.总是使用#id去寻找element. 在jQuery中最快的选择器是ID选择器 ($('#someid')). 这是因为它直接映射为JavaScript的getElementById()方法. 选择单个元素 <div id="content"> <form method="post" action="/"> <h2>Traffic Light</h2> <ul id="traff