草庐IT

线程不安全

全部标签

c - 无法使用for循环创建多个线程

我正在尝试使用for循环创建3个线程。以下是我的代码片段:DWORDWINAPIThreadProc0(LPVOIDparam){return0;}DWORDWINAPIThreadProc1(LPVOIDparam){return0;}DWORDWINAPIThreadProc2(LPVOIDparam){return0;}intWINAPIWinMain(HINSTANCEhInst,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd){DWORDthreadId=0;intmax_number=1;//Startthethreads

创建 3 个线程并使用 WSAWaitForMultipleEvents() 和 WSAEnumNetworkEvents() 时 CPU 使用率 100%

我创建了3个线程,每个线程都有一个套接字。在每个线程中,套接字被设置为“事件驱动”,并且每当数据可供读取时,就会生成一个事件。该代码工作正常,但它占用CPU使用率高达100%,这肯定是不可取的。我想我犯了一些错误。下面是我的代码。请帮助我找出导致100%CPU使用率的错误。代码:DWORDWINAPIThreadProc(LPVOIDparam){intthreadNumber=(int)param;intPORT=8888+threadNumber;//sothateachthreadbind()sitssockettoadifferentPortnumber.WSADATAwsa;

c# - 使用线程进行数据库操作的最佳方式是什么?

我正在开发一个以SQLCompact作为主数据库的WinForms应用程序。有人告诉我我永远不会弄乱UI线程,每个操作都需要在UI线程之外完成。按照这个演讲,我为每个CRUD操作创建了一个线程并出现了一个进度条,但我认为这可能不是执行此操作的最佳方法,而且我不确定何时何地在数据库操作的同时使用线程。我没有使用UI线程来进行这些数据库调用,但如果我愿意的话,我没有看到任何问题。为了向用户显示信息,我在需要时调用(在网格或组合框中显示数据)。这是一小段代码:this.SuspendLayout();ProgressDialogprogressDialog=newProgressDialog

c++ - 在 Windows C++ 服务中阻塞两个线程

我有一个用C++编写的Windows服务,用作监听传入连接的TCP服务器。我初始化了服务器套接字并将accept代码放在一个单独的线程中。这将接受并处理传入的连接。但是,我还需要停止该线程以防服务收到停止信号。所以我想到了使用CreateEvent创建一个事件对象并等待它发出信号。这种等待将发生在创建接受线程的线程中。所以我可以使用TerminateThread函数在收到STOP信号时停止接受线程。然而,MSDN说TerminateThreadisadangerousfunctionthatshouldonlybeusedinthemostextremecases.应该如何严格遵守,我

c++ - 创建远程线程 - ERROR_ACCES_DENIED

我认为我的代码现在终于可以工作了。唯一的问题是,出于某种原因,即使我已经使用PROCESS_ALL_ACCESS打开进程,CreateRemoteThread也会返回一个错误:ERROR_ACCESS_DENIED。错误是通过GetLastError检索到的,它输出“5”,转换为ERROR_ACCESS_DENIED。#include#include#includechar*dllPath="C:\\Users\\Kalist\\Desktop\\Projects\\DLL\\bin\\Debug\\DLL.dll";char*ProcToInject="calc.exe";intma

c# - 是否可以在不使用编译指令的情况下检测主应用程序线程是否作为 Windows 服务运行?

我需要检查包含在共享库中的方法,该库被Windows窗体应用程序和Windows服务引用。当我们在控制台模式下进行检查时,我必须允许潜在的对话。如果是Windows服务,我将改为在事件日志中写入消息。我找到了很多使用编译指令来做到这一点的方法。是否有其他更优雅的方法?谢谢 最佳答案 可以查看Environment.UserInteractive如果您的应用程序作为Windows服务运行,该属性将返回false。 关于c#-是否可以在不使用编译指令的情况下检测主应用程序线程是否作为Wind

c++ - COM 函数生成不会消失的线程

我正在开发一个小型应用程序,该应用程序旨在调用一些(非常多样化的)功能,遗憾的是这些功能超出了我的控制范围,并且设计的方式让我不知道何时完成了正确的用户操作。特别是其中一些会产生一个线程来完成它们的工作,最终会在未来的某个时刻死亡。所以有些是同步实现的,有些是异步实现的,我的代码不知道它会是哪一个。我的应用程序的唯一目的是启动这些任务并在完成后终止。由于目的是自动化,我预计它会在短时间内从批处理文件中调用100次,所以我不希望这个过程停留的时间超过绝对可能的时间。因为我没有可以等待的信号,我的主线程上的ExitThread()似乎是可行的方法,这样由外部代码产生的任何线程最终都会终止进

c++ - 创建可暂停/可恢复线程的最佳方法是什么

我正在为一个发送低缓冲区通知的微处理器做一些网络编程,我有一个线程可以写入一定数量的信息。完成后,它需要进入暂停状态并等待低缓冲区通知恢复。使用windows的线程池api还是使用通过CreateThread()创建的线程更好? 最佳答案 当您的线程需要等待时,它应该开始等待一个事件。这会自动挂起线程。Windows为此提供了WaitForMultipleObjects和WaitForSingleObject函数。Linux使用条件变量或信号量。 关于c++-创建可暂停/可恢复线程的最佳

ruby - 如何在处理文件时在 ruby​​ 中同时运行多个线程?

今天我一直在研究Ruby和线程。我有一个要检查的代理列表。假设10秒的超时通过一个非常大的代理列表将花费很多小时,如果我写这样的东西:proxies.eachdo|proxy|check_proxy(proxy)end我试图找出线程的第一个问题是如何同时启动多个线程。我在网上找到了一小段简洁的代码:forpageinpagesthreads就同时启动它们而言,似乎工作得很好。所以现在我可以...开始同时检查所有7000条记录?我如何转到一个文件,为每个线程取出一行,运行一批大约20个并重复该过程?我能否运行一个while循环同时启动20个线程(从文件中删除行)并一直运行直到文件为空?我

c++ - 如何多次顺序调用3个线程?

如何多次顺序调用3个线程?例如:在迭代1中,执行顺序应为“Thread0->thread1->thread2”,然后在迭代2中执行顺序应相同,即“Thread0->thread1->thread2”,依此类推。示例代码只执行一次3个线程。它不会进行第二次迭代。Thread0=CreateThread(NULL,0,ThreadProc0,NULL,CREATE_SUSPENDED,&ThreadID);Thread1=CreateThread(NULL,0,ThreadProc1,NULL,CREATE_SUSPENDED,&ThreadID);Thread2=CreateThread