草庐IT

thread-sleep

全部标签

c++ - [C++] 对于线程中的 'sleep' 函数,这是否是一种有效的方法?

我想在我的线程类中实现一个sleep()函数,但我不知道这是否是一种有效/正确的方法。这是我的整个线程类(thread.h):#includestructRUNNABLE{virtualvoidrun()=0;};classthread{public:voidstart(void*ptr){DWORDthr_id;HANDLEthr_handl=(HANDLE)_beginthreadex(NULL,0,thread_proc,ptr,0,(unsignedint*)&thr_id);}voidsleep(intsleep_time,boolalertable){SleepEx(sle

c++ - Windows 线程 sleep 并从另一个线程唤醒

我有一个线程在一个类中运行,我想让自己进入休眠状态,并在另一个线程唤醒它时唤醒,如果可能的话,不传递互斥锁或其他元素,所以它是自包含的。基本上,我已经尝试过在调用WaitForSingleObject两次的线程中使用互斥锁的方法,期望它使互斥锁在第一次调用时不发出信号,但每次函数返回0,因为互斥锁已经发出信号并且线程是互斥锁的所有者,并且仍然是所有者。例如,我希望一旦进入休眠状态,就会调用一个类方法来释放互斥量。在Windows中是否有一个简单的方法来解决这个问题,或者我会被迫打破封装吗?运行 最佳答案 虽然Waitable句柄方法

windows - shell32.dll : access violation during GetOpenFileName new thread

GetOpenFileName因访问冲突而失败。文件必须在桌面上并且名称很长。只有在第一次成功打开文件后才会出现问题。当鼠标光标悬停在文件上时出现问题,因为工具提示即将显示。请参阅下面的答案。我将在下面留下原始问题描述。迈克·D。=======================我正在使用GetOpenFileName。我有时会在shell32的深处遇到访问冲突。第一次使用此代码时不会发生违规,通常需要五六次尝试。此外,如果在弹出打开的文件窗口后一两秒内选择一个文件,则不会发生违规。另外,我调试时显示的调用堆栈不包含我的任何代码。就好像某个独立的线程正在醒来做某事。非常感谢任何关于我如何调

windows - 如何在 Windows 中获得线程句柄的访问权限 THREAD_QUERY_INFORMATION

我想使用GetExitCodeThread()。MSDN文档说,“句柄必须具有THREAD_QUERY_INFORMATION或THREAD_QUERY_LIMITED_INFORMATION访问权限。”我使用_beginthreadex()创建我的线程。当我调用这个API时,我应该如何设置THREAD_QUERY_INFORMATION标志?它应该是initFlag的一部分吗?文档没有说明必须如何准确设置此标志。 最佳答案 _beginthreadex返回的句柄已经足够访问线程以查询有限的信息。毕竟它有终止线程的权限,这远不止查询

c++ - #include<线程>,错误无法打开源文件 "thread"

我期待在Windows上用C++实现多线程,我找到了链接http://www.cplusplus.com/reference/thread/thread/作为对线程的解释,在给定的示例中他们提到了线程的标题命名,实际上我正在Microsoftvisualstudio2010中编写代码,它说错误无法打开源文件“thread”,请帮助我这是否有帮助,或者请向我推荐任何其他有帮助的网站,实际上我是高级C++的初学者,在此先感谢。 最佳答案 是C++11header,VisualStudio2010不实现C++11。尝试更新到VisualS

windows - Delphi:创建和读取文本文件导致 I/O 32 错误。应该使用 sleep 来防止这种情况吗?

我目前正在开发一个需要能够报告Windows是否已激活的程序。functionTSoftwareReport.getLicenceInfo:String;varActivated:String;LicenceFile:TextFile;begin//redirectcommandoutputtotxtfileShellExecute(0,nil,'cmd.exe','/Ccscript%windir%\system32\slmgr.vbs/xpr>C:\Activated.txt',nil,SW_HIDE);//ReadthefileSleep(1000);AssignFile(Lic

Python 2.x - Windows 上毫秒级别的 sleep 调用

我在这个论坛上得到了一些关于如何在Python2中编写时钟对象的很好的提示。我现在已经有了一些可以工作的代码。这是一个以60FPS的速度“滴答”的时钟:importsysimporttimeclassClock(object):def__init__(self):self.init_os()self.fps=60.0self._tick=1.0/self.fpsprint"TICK",self._tickself.check_min_sleep()self.t=self.timestamp()definit_os(self):ifsys.platform=="win32":self.t

windows - 重叠 I/O : How to wake a thread on a completion port event or a normal event?

我想使用线程池来启动/取消重叠读取操作——分别使用ReadFile()和CancelIo()——以及处理任何读取操作完成时的完成端口事件。任何线程都可以发起读操作任何线程都可以处理读取完成事件只有发起读取的线程可以取消它(这是一个CancelIo()限制)我不确定如何实现它。通常调用GetQueuedCompletionStatus()来等待完成端口事件,调用WaitForSingleObject()来等待正常事件,但不清楚如何混合使用这两者。如果PostQueuedCompletionStatus()让我指定一个特定的线程来唤醒我就会被设置。有什么想法吗?更新:该解决方案必须在Win

C#/.NET Timers 和 Win32 Sleep 函数都不准确

对于下面的代码:实际间隔始终是1014.01毫秒而不是1000毫秒...我也尝试过在C++中使用System.Windows.Forms.Timer、System.Threading.Timer和WinAPISleep(int)函数,但额外增加的14.01ms始终存在。Windows8的系统时钟是准确的,但.NET计时器和WindowsAPI的Sleep(int)函数都不准确。publicpartialclassForm1:Form{privatelongticks;publicForm1(){InitializeComponent();}privatevoidForm1_Load(o

windows - C/C++ : duplicate main() loop in many threads

我有这个“有趣”的问题。我有这个遗留代码,看起来像intmain(){while(true){doSomething();}}我想在许多线程中复制doSomething(),这样现在main()看起来像intmain(){runManyThreads(threadEntry)}voidthreadEntry(){while(true){doSomething();}}问题是doSomething()访问许多全局变量和静态变量,我无法更改它的代码。是否有复制这些静态变量的技巧,因此每个线程都有自己的集合?(某种线程本地存储,但不影响doSomething())..我使用VisualC++