草庐IT

c++ - 如何等到互斥体解锁?

有一个互斥数组。我的功能:检查互斥体是否被锁定2a。如果不是,则锁定它2b。如果锁定,等待解锁并锁定另一个函数解锁它。问题是我在等待部分崩溃了:HANDLEmutexes[N];voidfunc(inti){//(*)waituntilunlockedorcreateifunlockedwhile((mutexes[i]=CreateMutex(NULL,TRUE/*samewithFALSE*/,NULL))!=NULL);/*orWaitForSingleObject(mutexes[i],INFINITE)*/mutexes[i]=CreateMutex(NULL,TRUE,NU

c++ - Win32 临界区与互斥性能

我写了一个小程序来比较CriticalSection和Mutex在Windows中的性能。在我运行的测试中,获取关键部分似乎更慢:O谁能解释为什么这两件事花费的时间几乎相同,以及内部发生了什么。这是我使用的计时器-http://cplus.about.com/od/howtodothingsi2/a/timing.htm#include"stdafx.h"#include#include#include"h_timer.h"#include#include#include#defineMAX_THREADS2000//CommentandUncommentthistoenable/di

c++ - 由于后台线程上的事件,在 ui 线程上执行方法

我有一个正在轮询服务器的后台线程。当有数据时,我想在UI线程上处理数据。如果我存储主窗口的hwnd。如何让特定方法staticvoidDataHandler(void*data)在UI线程上执行?我认为创建一个传递hwnd和函数指针的计时器会起作用。但是有更好的方法吗?我可以使用PostMessage以某种方式调用数据处理程序吗?此外,我没有编写UI代码,因此我无法修改消息循环中的任何内容。 最佳答案 我最常使用两种主要方法在线程之间进行通信。1)PostMessage()创建自定义Windows消息,ala:#defineWM_Y

c++ - Windows 上的 C 编译器之间的实际区别是什么?

用VisualC/C++2005/2008编写的程序可能无法用其他编译器(例如GNUC/C++)编译,反之亦然。例如,当尝试重用使用windows.h的代码时,为特定编译器编写的代码与另一个编译器一起使用时,需要注意哪些区别?是否有任何关于如何生成与一个编译器或另一个编译器兼容的代码的信息,例如使用GC/C++或MSVC/C++?尝试这样做会导致什么问题?LCC和DigitalMars等其他编译器呢? 最佳答案 尝试将为MSVC编写的代码编译为其他编译器时,要做的第一件事是在关闭Microsoft扩展的情况下进行编译。(我认为使用/

c++ - 为什么我在递归删除目录时遇到问题?

我编写了一个使用WIN32api创建临时目录层次结构的应用程序。现在,当我想在关闭应用程序时删除目录时遇到了一些问题。假设我有一个目录层次结构:C:\temp\directory\subdirectory\我正在使用这个递归函数:boolDir::deleteDirectory(std::string&directoryname,intflags){if(directoryname.at(directoryname.size()-1)!='\\')directoryname+='\\';if((flags&CONTENTS)==CONTENTS){WIN32_FIND_DATAAfda

c++ - 如何使用 WAVEFORMATEX 写入 .WAV 文件?

我编写了一个程序,它可以打开wav文件并通过控制台播放它们,然后修改声音并重播...如何保存一个新的带有修改后声音的wav文件?所以基本上我想创建一个wav文件并将修改后的结果写入其中。我使用WAVEFORMATEX作为音频数据。我做了更多的工作,我创建了wav文件,但它不播放这是我的代码://writesthemodifiedaudiodataintoa.WAVfilevoidwriteWaveFile(char*filename,WAVEFORMATEX&wfx){FILE*file=fopen(filename,"wb");if(file){//writewaveheaderun

c# - 获取当前用户的全名,返回一个空字符串(C#/C++)

我尝试获取当前登录用户的全名(全名,而不是用户名)。以下代码C#、C++工作正常,但在未连接到网络的XP计算机上,如果我在登录后约20分钟运行它,我得到的结果是空字符串(它在登录后的前约20分钟内运行正常登录)使用Win32API(GetUserNameEx)而不是PrincipalContext,因为它在脱机工作时PrincipalContext最多可能需要15秒。任何帮助,为什么我得到的结果是一个空字符串,尽管指定了用户全名???-C#代码publicstaticstringCurrentUserFullName{get{constintEXTENDED_NAME_FORMAT_N

c++ - 防止显示器开机

我正在使用SendMessage(HWND_BROUADCART,WM_SYSCOMMAND,SC_MONITORRPOWER,2)关闭监视器。可以,但是当有人触摸键盘或鼠标时显示器会重新打开。我尝试使用DevicePowerSetDeviceState函数和键盘和鼠标的DEVICEPOWER_CLEAR_WAKEENABLED来摆脱这个问题:它没有返回任何错误,但也没有任何效果。如何防止显示器在Vista和Windows7中重新开机? 最佳答案 将所有显示器连接到同一个socket(如果您有很多显示器,则连接两个、三个……sock

c++ - LockFileEx 读写升级/降级

我需要打开一个文件,对其进行读取锁定,然后尝试获取写入锁定,但如果失败则保留读取锁定。这在使用fcntl锁定的POSIX中效果很好。在Windows中,我可以使用LockFileEx来获取文件锁。我可以获得读写锁(共享和独占)。但是,在Windows中,我似乎必须先取独占写锁,然后再加上读锁。这与我在POSIX上所做的顺序相反,它会给我的抽象层带来问题。当我在POSIX中按该顺序执行此操作时,我通过获取读锁失去了写锁,因为fcntl替换了现有锁而不是像Windows那样添加锁。我可以用#ifdefs破解它以更改调用站点的锁定顺序,但我正在寻找好的想法来修复我的抽象代码。//Thisis

c++ - 从 USB 端口输出数据? ( window )

我想知道WinAPI或其他东西是否有办法从USB设备获取原始数据,或者可以引导我朝着正确的方向前进。例如,对于MIDI设备,此数据可能是速度,以及击中了哪个音符。谢谢 最佳答案 不是直接使用,但您现在可以使用usblib在window上 关于c++-从USB端口输出数据?(window),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4342459/