
i++){if(thread_info[i].entity=='r'||thread_info[i].entity =='r') {h_thread[i]=createthread(null,0,(lpthread_start_routine)(reader),&(thread_info[i]),0,null) handle htrehad2 = createthread(null, 0, (lpthread_start_routine)doit, (void*)2, 0, null)handle htrehad2 = createthread(null, 0, (lpthread_start_routine)doit, (void*)2, 0, null)
参数1 : 按MSDN上的表述,为空时handle不可以被继承.
参数2 : 栈的大小, 为0时取默认值.
参数3 : 线程函数指针, 上面的listen就是函数名
参数4 : 传给变量的参数指针, 因为没法传一个, 通过struct把所有参数装在一起传入.指针类型为void.
该样本首先解密下载服务器的地址,随后判定该样本是否带参数运行及参数是否包含“win7”字符串ccriticalsection类,如果不包含以及不带参数运行则处于构建具备下载功能的线程,进入构建线程时判定传递给线程的参数能否为空,如果不为空则处于线程构建过程ccriticalsection类,如下图所示psathread和binherithandles参数 874.2.3 fdwcreate参数 894.2.4 pvenvironment参数 914.2.5 pszcurdir参数 924.2.6 psistartinfo参数 924.2.7 ppiprocinfo参数 984.3 终止进程 1004.3.1 主句柄的入口点函数返回 1004.3.2 exitprocess函数 1014.3.3 terminateprocess函数 1024.3.4 当进程中的所有线程中止时 1034.3.5 当进程中止运行时 1034.4 子进程 1044.5 管理员以标准用户权限运行时 1064.5.1 自动提高进程的权限 1094.5.2 手动提高进程的权限 1114.5.3 何为当前权限上下文 1124.5.4 枚举系统中正在运行的进程 1144.5.5 process information示例程序 115第5章 作业 1215.1 对作业中的进程施加限制 1245.2 将进程放入作业中 1315.3 终止作业中的所有线程 1325.4 作业通知 1355.5 job lab示例程序 138第6章 线程基础 1406.1 何时创建线程 1416.2 何时不需要创建线程 1436.3 编写第一个线程函数 1446.4 createthread函数 1446.4.1 psa参数 1456.4.2 cbstacksize参数 1456.4.3 pfnstartaddr和pvparam参数 1466.4.4 dwcreateflags 1476.4.5 pdwthreadid 1476.5 终止运行线程 1486.5.1 线程变量返回 1486.5.2 exitthread函数 1486.5.3 terminatethread函数 1496.5.4 进程中止运行时 1496.5.5 线程终止运行时 1506.6 线程内幕 1506.7 c/c++运行库注意事项 1536.7.1 用_beginthreadex而不要用createthread创建泛型 1616.7.2 绝对不需要调用的c/c++运行库函数 1616.8 了解自己的身份 162第7章 线程调度为了区分是否是建立控件的轮询访问该控件,windows应用程序中每一个控件对象都有一个invokerequired属性,用来检测能否需要借助读取invoke方法完成其它线程对该控件的操作,如果该属性为true.说明是其它线程操作该控件,这时可以建立一个委托实例,然后读取控件对象的invoke方法,并传入必须的参数完成相应操作,否则可以直接对该控件对象进行操作,从而确保了其它线程安全操作本线程中的控件.
参数6 : 接受函数返回的线程的ID.

线程开始运行后能借助WaitForSingleObject(hlisten, INFINITE)阻塞, 等待线程返回.
dll组件外监控和期待消息的处理结果,直到目标窗口的才处理返回,sendmessage在返回之前还必须做许多工作,如响应别的轮询向它发送的sendmessage().postmessge() 到别的线程的之后最好使用postthreadmessage 代替如果在不同线程外,sendmessage发送消息到目标窗口所属线程的消息队列,然后发送消息的轮询在user32.dll模块外监控和期待消息处理,直到目标窗口处理完返回最好用postthreadmessage代替postmessage,他工作的很好,sendmessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他需要还在做一些检测工作,比如监视qs_sendmessage标志),直到目标窗口处理完然后结果返回,发送消息的线程才再次运行
------------------同步对象CSemaphore,CMutex,CCriticalSection,CEvent与CSingleLock-----------
CMutex,CCriticalSection用于对资源的互斥访问. CMutex可以跨进程使用, CCriticalSection只可以在进程外部使用. 相对的建立CMutex需要更多的资源. 只用于进程外部时使用CCriticalSection可以获得更好的强度. 执行多次(例如1000000)的Lock()和Unlock()可以发现明显的效率差异.
CSemaphore用于限制特定个数的线程对资源的访问(信号量).
CEvent实现事件, 用于线程同步
-----------------CSemaphore,CMutex,CCriticalSection的使用--------------------

通过CSingleLock可以对以下三个同步对象执行Lock()和Unlock()
----------------CMutex------------------
CMutex mute;
CSingleLock singlelock(&mute);
singlelock.Lock();
singlelock.Unlock();
-----------CCriticalSection -----------

CCriticalSection cs;
CSingleLock singlelock(&cs);
singlelock.Lock();
singlelock.Unlock();
------------CSemaphore--------------
CSemaphore sem(int init , int max) init为初始信号量, max为最大信号量. 执行Lock会增加信号量, 相对地执行Unlock将减少信号量.
CSingleLock singlelock(&sem);

singlelock.Lock();
singlelock.Unlock();
3)使用cevent类实现线程间通信使用事件cevent类实现线程间通信如果cevent 类对象为自动事件,则在setevent()将事件修改为有信号状况后,cevent 类对象由平台自动重置为无信号状况
}……void csample06view::oneventstart(){// 创建事件hevent = createevent(null, false, false, null)handle h = createevent(null, false, false, text("global\\myname"))handle h = createevent(null, false, false, text("local\\myname"))
参数1: 为空时handle不可以被继承.
参数2: 为true时必须自动执行ResetEvent使事件进入无信号状况, 为false时则在期待此事件的线程释放后(如WaitForSingleObject)自动设为无信号状况
参数3: 初始状态. false为无信号状态, true为有信号状况
参数4: 事件命名, 用于进程外部时能设为空
通过WaitForSingleObject(handle, INFINITE)阻塞,等待事件变为有信号状况. handle为目标事件的handle
通过SetEvent(handle)使目标事件进入有信号状况
参数2为true时借助ResetEvent使目标时间进入无信号状况
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-132016-1.html
我就笑笑啦明显是针对新出的6s6sp来更新的那些以前的更新难免会出一些毛病喽
人均GDP和收入看起来你好富啊
用船撞