草庐IT

c++ - 在 win32::WaitForSingleObject 期间 Windows 上的 Boost.Thread 断言/崩溃

我的代码中有一个很少发生的问题会触发断言,涉及Boost.Thread库。我无法使用独立示例重现此问题,而且我也不知道是什么原因造成的,因此很难提供示例案例。我希望任何熟悉boost.thread内部结构的人都能提供帮助。这是我知道的:问题发生在boost::lock_guard(或unique_lock和普通非递归互斥锁的变体)被声明。它发生在Boost.Asio的处理函数中。堆栈上是执行io_service::run的线程,一堆调用Asio回调函数的胶水,然后是我的回调函数(由async_write调用触发)。该函数的第一行是lock_guard的声明这是导致问题的原因。this我

c - 如何在主窗口菜单中放置一个关闭按钮?

我想在主窗口的菜单中添加一个“关闭”按钮。可以在此处的图片中找到示例:http://ifyoucodeittheywill.com/img/crimson-editor.png(因此,在窗口标题区域中有一个正常的关闭按钮,但是,在窗口的菜单栏中也有一个关闭按钮--在最右侧)。我使用的是基本的win32API,但使用MFC的示例也可以。有人知道怎么做吗?谢谢,安德鲁 最佳答案 这些按钮通常带有MDI窗口。然而,我很确定所描述的应用程序使用它自己的,或者更可能是一些高级的第三方工具包。因为,老实说,WindowsAPI和MFC(它只是W

c++ - 创建一个只能在父窗口内拖动的窗口

我有一个WIN32/C++应用程序,我想在其中创建不能拖出父窗口的子窗口。如果无论如何重要的话,我希望这些窗口是所有者绘制的。应该足够简单;我正在寻找有关该主题的一些基本指导和技巧。 最佳答案 看来您想制作一个MDI应用程序。使用更高级别的框架(如MFC、WinForms、VCL等)要容易得多,但当然也可以使用普通的Win32来完成。可在此处找到MSDN文档:MultipleDocumentInterface. 关于c++-创建一个只能在父窗口内拖动的窗口,我们在StackOverflo

windows - SetErrorMode 没有效果?

我打电话"SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX);"在加载DLL之前。然而弹出窗口消息"Thisapplicationhasfailedtostartbecauseblabla.dllwasnotfound...".为什么会这样?我认为这是SetErrorMode应该防止的?谢谢! 最佳答案 对SetErrorMode的调用可能永远不会执行-如果您静态链接到DLL,它将与可执行文件一起加载。您看到的消息是由操作

windows - 启动 WinAPI 和 Qt?

我开始学习在Windows环境中编程。有人推荐我从“ProgrammingWindows5the”开始。我的问题是学习WindowsGUI是不是必须的,因为Qt提供了可移植性?如有任何建议,我们将不胜感激。 最佳答案 QT作为开发平台的一个关键特性是它能够生成跨平台应用程序。如果您在QT应用程序中使用WindowsAPI,那么您就是在破坏该关键功能,因此也就破坏了使用QT的意义。如果您打算这样做,您也可以使用特定于Windows的框架(如.NET)编写代码并开发适当的Windows软件。

c++ - windows api创建快捷方式并将应用程序放入开始菜单

我有一个用C++编写的客户端应用程序。为此,我想在桌面上创建一个快捷方式,并在安装时在开始菜单中创建一个条目。是否有任何C++windowsapi?我试着寻找它,但找不到。谁能告诉我怎么做? 最佳答案 您必须亲自动手,使用COM访问Shell。您可以在这里阅读有关ShellLinks的信息.另外,thisproject可能会为您提供所需的代码。要获取桌面和开始菜单文件夹的位置,您可以使用适当的SystemVariables. 关于c++-windowsapi创建快捷方式并将应用程序放入开

c++ - 线程堆栈错误

我的代码有问题,无法解决。我有三个线程,线程1以十六进制形式输入两个数字,线程2和线程3将前两位数字与后两位数字交换并打印结果。错误信息:Run-TimeCheckFailure#2-Stackaroundthevariable'str'wascorrupted.DWORDWINAPIchangevalue(LPVOIDlpParam){WaitForSingleObject(inThread,INFINITE);//Inputthreadprintf("thread1and2running\n");intnum=0;num=(int)lpParam;inti=0;charstr[10

c - 从键盘获取输入而不等待输入

fgets()和getch()等函数将等待用户输入,然后再继续。我想要的是这个功能:如果用户按下“x”,变量将开始递减,“c”将导致变量开始递增。问题是当我尝试获取输入时程序停止了。我希望变量在等待用户输入时继续递增或递减并且不“卡住”。我正在使用visualstudio2008,编写一个c控制台应用程序。谢谢! 最佳答案 您需要一个特殊的控制台输入/输出库,例如NCURSES或Borland的CONIO来执行此操作。不能用标准C库来做。如果您只使用Windows,请查看WindowsConsoleFunctions.

windows - 尝试锁定 Windows

在pthread库中可以找到非阻塞函数:intpthread_mutex_trylock(pthread_mutex_t*mutex);我能在Windows中找到类似的东西吗? 最佳答案 如果您正在为您的锁使用临界区,则等效于TryEnterCriticalSection().如果你正在为你的锁使用一个互斥量那么等同于调用WaitForSingleObject()传递0作为超时。如果您不熟悉Windows同步对象,请不要误以为更喜欢互斥体,因为它有一个您从pthreads背景中最熟悉的名称。只要您的同步在进程内进行,关键部分就会更高

c++ - 模态消息循环中的 WM_CLOSE

我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,我想达到下面的第二个if(msg.message==WM_CLOSE)。for(;;){if(PeekMessage(&msg,0,0,0,PM_NOREMOVE)){if(msg.message==WM_CLOSE){GetMessage(&msg,0,0,0);break;}else{if(GetMessage(&msg,0,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}if(msg.message==msgEnd)break;}}问题是此if中的代码从未达