关于WaitForSingleobject用法

关于WaitForSingleobject用法

关于WaitForSingleobject用法

文章插图
OnClose中的 WaitForSingleObject 这种做法是不可行的 。
多线程中WaitForSingleObject 这个函数做什么用的
关于WaitForSingleobject用法

文章插图
WaitForSingleObject简单的说 , 这个函数在多线程中可以起到阻塞线程的作用 , 但其实这个函数有很多用处!参数hHandle[in]对象句柄 。可以指定一系列的对象 , 如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等 。
如果dwMilliseconds为0 , 对象没有被触发信号 , 函数不会进入一个等待状态 , 它总是立即返回 。如果dwMilliseconds为INFINITE , 对象被触发信号后 , 函数才会返回 。
如何学习和使用 waitforsingleobject用最简单的语言说就是这个对象有两个状态比如我们称0和1 , 称什么一点也不重要 , 有信号和无信号就是相对的两个状态 , 没什么意义 , 你就认为一个状态是0另一个状态是
1.?在程序里如果加了WaitForSingleObject , 那么程序到这里就去检测你给他的那个句柄的状态 , 如果是0程序就停在这里了 , 如果是1 , 程序就继续下去 。
假如你有两个线程 , 都有可能访问同一个文件 , 而同一个文件是不能被两个线程同时写入的 , 那么你就需要在写入之前先判断文件有没有被另一个线程在写入 , 如果有则等着 , 等另一个线程写完之后你再继续 , 我们不能用一个死循坏来尝试打开文件知道成功为止 , 这样会让CPU有非常高的占用率 。这里你就要创建一个对象 , 这个对象有两个状态 , 我们约定 , 如果一个线程要写入文件之前就把这个对象状态变成0 , 写完之后把它变回1 , 那么另一个线程在写文件之前只要检测这个对象是不是为0就可以确定文件有没有被另一个线程在写入了 。检测的过程就用WaitForSingleObject来操作 , 如果为1 , WaitForSingleObject就和没这句话一样立刻执行下去了 , 如果那个对象是个0 , 那么WaitForSingleObject就会停在这里等 , 等到另一个线程写完文件 , 因为那个线程在写完文件之后会把对象变成
1.?这个状态1我们命名为有信号状态 , 状态0我们称无信号状态 。
我们就把这个对象叫做互斥体 , 他起到了对这个文件读写的互斥作用 。这整个写文件之前之后改变互斥体状态 , 写之前检测互斥体状态这个过程就是一个线程的同步 。同步是编程的人自己要考虑的问题 , 系统不会帮你同步 , 也就是说我们进行了上述的约定之后 , 你在编程的时候必须要在写入文件之前将互斥体置为无信号状态 , 写完之后置为有信号状态 。
这样应该好懂了吧?不懂继续追问吧 。
WaitForSingleObject等待进程结束【关于WaitForSingleobject用法】首先楼主要获得进程 XXX.exe 的 PID , 可以通过循环穷举进程获得 。获得 PID 后 , 用 OpenProcess 打开这个进程 , 该函数即会返回进程句柄 。
关于WaitForSingleObject的用法第二次调CreateEvent传相同的lpName返回的句柄是不同的(但实质一样), 但是所指向的内核对象是相同的.(考虑到安全性和权限问题, 也有可能会出错, 返回NULL). 在创建的时候它会先查找lpName这个名字的内核对象是否存在, 如果不存在再创建.也就是说如果返回有效的HANDLE, 它所表示的Event是同样的
WaitForSingleObject是什么意思WaitForSingleObject() , 由于它作用的范围很广 , 对不同的对象
会有不同的含义 。线程,事件,信号等这些东西都被操作系统当成对象,叫内核对象,当内核对象被触发的话,可以被WaitForSingleObjec捕获的.到底要捕获那种对象,根据其参数也决定,具体的看msdn 。
直到有信号 。
关于WaitForSingleObject的用法
关于WaitForSingleobject用法OnClose中的 WaitForSingleObject 这种做法是不可行的 。
WaitForSingleObject的问题CreateProcess 是创建一个新的进程(也就是根据可执行文件名称运行一个程序) 。你说的——“但如果B程序是先自己启动(双击启动的) 。
实际上CreateProcess不考虑当前是否运行了这个可执行文件的 。也就是说新创建的跟你运行的是两码事——虽然是同一个可执行文件 。