草庐IT

线程安全——Synchronized

全部标签

c++ - 从非 COM 静态库中删除对 OleInitialize 的调用是否安全?

今天我必须在原生C++项目中定义WIN32_MEAN_AND_LEAN预处理器宏,因为我决定在其中使用boost::asio,如果没有该宏,我会得到构建错误。事实是,我现在得到的错误是OleInitialize:identifiernotfound。根据MSDN,此函数用于初始化COM库。我的项目现在不是COM库,但我的合作伙伴说它曾经是。在这种情况下,删除电话是否安全?该项目混合使用了Win32串行端口函数和boost::asio(逐渐地,我将只使用boost::asio)。我担心的是OleInitialize对于某些Win32调用可能是必需的。这就是它所做的一切:HRESULThO

c# - 锁定文件同时保留在同一线程中读取/追加/写入/截断的能力?

我有一个文件,粗略地说,包含应用程序的状态。我想实现以下行为:当应用程序启动时,锁定文件,以便其他应用程序(或用户本身)无法修改它;从文件中读取之前的应用状态;...做工作...用新状态更新文件(给定文件格式,涉及重写整个文件;操作后文件的长度可能会减少);...做工作...再次更新文件...做工作...如果工作失败(应用程序崩溃),则解除锁定,文件内容保留为执行前一个工作单元后的内容。看来,要重写文件,应该使用Truncate选项打开它;这意味着每次他们想要重写文件时都应该打开一个新的FileStream。所以看起来我想要的行为只能通过这种肮脏的方式来实现:当应用程序启动时,读取文件

c++ - 是否可以在一个线程遇到异常时卡住所有线程

我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的踪迹。我有兴趣找到一种在一个线程中捕获异常后立即卡住所有线程的好方法。现在,我所能做的就是查询每个事件线程,然后在其上执行SuspendThread()。但是,这将导致每个线程在捕获到初始异常后执行的时间更长一些。有没有办法立即让每个线程挂起?谢谢。 最佳答案 您是否尝试从捕获异常的工作线程使用PostMessage()到GUI线程?建议的简要步骤:1)GUI线程生成少量工作线程2)工作线程PostMessage()一旦捕获到异常3)GUI线程接收消

C++ 将对象传递给线程

我有一个关于我不太理解的行为的问题:我有两种C++代码:CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)clientThread,(LPVOID)connectionSocket,0,NULL);主题:Clienta;a.clientsocket=connectionSocket;a.testText()a.sendSocket();工作正常(sendSocket向套接字发送一些测试数据)。但是如果我这样做Clienta;a.clientsocket=connectionSocket;CreateThread(NULL,0,(LPTHREAD_S

windows - 在 Azure Web 角色中创建线程

我需要在我的AzureWeb角色上创建计划任务。删除SQLAzure数据库中的条目的小人。我想到了Quartz.net。但是我没有找到任何方法在我的AzureWeb角色上创建线程。如何在我的AzureWeb角色上创建线程?谢谢! 最佳答案 根据您的用例,您可以设置一个startuptask(例如独立安装quartz.net和您想要定期运行的所需代码)或从RoleEntryPoint.OnStart启动一个任务/线程/嵌入式quartz.net实例。另请查看许多相关问题,例如thisone,以确定在WebRole的IIS中运行、在We

c++ - 远程线程的 DuplicateHandle 失败,错误为 ERROR_INVALID_HANDLE

您好,我试图挂起一个远程线程,但在途中我偶然发现DuplicateHandle失败并出现错误6,ERROR_INVALID_HANDLE。下面的方法适用于当前进程,但如果给出了像“calc”(在同一主机中)这样的远程进程,则DuplicateHandle会失败。进程以Adminpriv运行,SeDebugPriv和SeSecurityPriv被授予(ProcessExplorer确认),但没有用。任何的想法?`boolDbgHelpWrapper::GetThreadStartAddress(IntPtrprocessHandle,DWORDprocessId,DWORDthreadI

windows - 如何禁用安全警告

如何关闭安全警告:RunonlyscriptsthatyoutrustWhilescriptsfromtheInternetcanbeuseful,thisscriptcanpotentiallyharmyourcomputerDoyouwanttoruninPOWERSHELL我试过将策略设置为不受限制。操作系统是windowsserver2003。我要执行的脚本在网络驱动器中。 最佳答案 网络位置通常与互联网的其余部分位于同一不受信任区域。您可以将位置添加到受信任的站点,也可以使用提升的PowerShell中的Set-Execu

c++ - 加入和终止 Windows 线程

我正在尝试使用Windows线程创建一个线程,如下所示:HANDLEhUSBPollThread=CreateThread(NULL,NULL,USBCan::CreateUSBPollLoop,(LPVOID)this,0,&outThreadID);但是我找不到任何函数来从线程外部加入或终止线程。谁能指出我正确的方向? 最佳答案 如果你在外部终止线程,你怎么能确定没有资源泄漏,没有同步对象被锁定?是的,你可以用TerminateThread杀死线程但你不应该这样做。您要做的是:您发出一个内部事件信号,表示您要终止线程操作,线程p

windows - Sox --多线程选项 : Split stereo wav file to 2 mono files Windows Line command

我已经在Windows命令行中编写了一个批处理程序来获取立体声wav文件,并使用soxv.14.4.0音频程序将左右声道拆分为单独的FLAC文件。像这样..for/r%%nin(*.wav)do(C:\sox\sox.exe%%n-c1%%n.left.flacremix1C:\sox\sox.exe%%n-c2%%n.right.flacremix2)但是,这比我希望的要长一些。我对此进行了更多研究,看来我可以使用SOX_OPTS和--multi-thread选项以及--buffer来同时执行两个sox操作。Sox文档说明了这一点:SOX_OPTS环境变量可用于为SoX的全局选项提供

c++ - 使用不同线程时 Win32 API 死锁

我在尝试从其他线程使用WIN32API时遇到死锁。我的应用程序需要额外的线程来提高帧速率。它实际上有帮助,但是,我在几乎所有系统功能中都遇到了死锁:::显示窗口::移动窗口::更新窗口例如,我知道ShowWindow()可以替换为ShowWindowAsync(),它确实解决了问题,但是,在MoveWindow()和UpdateWindow()中没有这样的替代方法。有人遇到过这些问题吗,解决方案是什么?谢谢! 最佳答案 术语“死锁”描述了一个非常具体的事情,两个线程等待访问被另一个锁定的资源。没有迹象表明这就是您的情况(或是否存在?