草庐IT

c++ - 我的程序在 Windows 上使用 MSVC 和 g++ 编译器运行,但在 Linux 上不运行

我正在为一项研究任务编写遗传算法。我不是一个非常有经验的C++程序员(因为我是一名数学家),但我管理我的程序在Windows环境中使用MSVC2008和g++编译器正确编译和运行(我使用CygWin在Windows7上运行g++)。现在,问题是这个程序必须在Linux环境下使用g++的集群计算机中运行,但它总是在执行时崩溃(尽管至少它编译正确)。我已经解决了明显的细节(例如使用/而不是\作为文件名),但无法使其在Linux上正常运行。但是,当我在下面注释函数“Cruce”时,程序结束了,尽管它显然没有执行所需的任务。这是这样一个函数的代码,以及它调用的其他函数(唯一的全局变量是BITG

c++ - 在 Windows 上处理用户 session 的关闭状态?

比如说,如果我打开一个记事本,在其中键入一些内容并且不保存它,然后从同一用户session调用以下API:ExitWindowsEx(EWX_LOGOFF,SHTDN_REASON_MAJOR_OTHER|SHTDN_REASON_MINOR_OTHER|SHTDN_REASON_FLAG_PLANNED);该用户session将进入“关闭状态”,此时操作系统将显示一个覆盖窗口,显示记事本阻止系统注销用户的消息。在用户单击“取消”或“强制退出”按钮之前,此叠加层不会消失。所以两部分问题:有什么方法可以知道哪些进程阻止了注销/关闭进程?有什么方法可以通过编程方式取消此用户session“

c++ - 结合 blits 和 gdi 绘图(不工作,闪烁)

我正在尝试将纹理blit与在其上绘制的gdi相结合(由voiddraw(){StretchDIBits(hdc,0,0,CLIENT_X,CLIENT_Y,0,0,BUF_X,BUF_Y,buffer,&bmi,DIB_RGB_COLORS,SRCCOPY);TextOut(hdc,10,10,"HelloWorld",11);}hdc在设置时被GetDC阻止了一次,但它可能没问题;上面这个我每秒在空闲循环中运行100次,并且还运行OnPain消息;这并不能很好地工作,因为TextOut结果只是闪烁,其余的都可以-有人可以告诉我一些建议如何消除这种闪烁并获得稳定的TextOut结果吗?

c++ - FindFirstFile 问题无法让任何示例正常工作。

我一直在使用FindFirstFile和FindNextFile时遇到问题,我需要让它们将所有dll列出到一个数组中,但我无法让它列出任何文件。我试过使用和编辑来自MSDN的示例代码,但这不起作用,因为它们将错误类型的变量传递给函数。我现在拥有的代码很抱歉,如果它一团糟,但我正在尽一切努力让它工作。我还使用了argv[1],因为我相信它给出了.exe的目录,这是我需要的,因为dll将被存储。我对为什么我尝试的所有示例都不起作用以及为什么我不能修改它们使其起作用感到非常困惑。WIN32_FIND_DATAFindFileData;HANDLEhFind=INVALID_HANDLE_VA

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

c++ - 在多个自动重置事件上使用 WaitForMultipleObjects

在我的一个项目中,我创建了多个自动重置事件和两个线程,线程使用WaitForMultipleObjects在继续运行之前等待一些事件,例如:HANDLEhTerminateEvent=CreateEvent(...);//autoresetHANDLEhStateChangedEvent=CreateEvent(...);//autoresetvoidthread1Func(){HANDLEhandles[2]={hTerminateEvent,hStateChangedEvent};WaitForMultipleObjects(2,handles,FALSE/*bWaitAll*/,

c - 是否可以仅按名称管理 JobObject,而无需保持打开的 HANDLE?

使用流程,我可以执行以下操作:intpid;::CreateProcess(NULL,cmd,...,&pi);pid=pi.dwProcessId;::CloseHandle(pi.hProcess);//thenlater...HANDLEproc=::OpenProcess(PROCESS_TERMINATE,FALSE,pid);::TerminateProcess(proc,1);::CloseHandle(proc);以这种方式,我可以仅通过pid管理windows进程,这对于多平台代码来说非常好。我想将此模式扩展到作业对象:HANDLEjob=::CreateJobObj

windows - 无法打开 VB 项目,无法加载错误 "C:\windows\system32\mscomctl.ocx"

我有一个VB项目能够正常工作,但现在当我打开该项目时,我收到了mscomctl.ocx错误。我已经重新注册了ocx,但仍然无法加载项目。我该如何解决这个问题? 最佳答案 我在Windows764位环境中打开项目时遇到了这个问题,它在winXP机器上工作正常。我之前在项目文件中做了一个非常简单的更改,上面写着Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0;MSCOMCTL.OCX我将2.1更改为2.0因为我在很多论坛上都看到过这样的情况,而且效果很好。VBP文件中的更新引用是Ob

c++ - 使用 GDI 在我的窗口周围绘制边框不起作用?

我想在我的窗口周围画一个边框,但我的代码似乎不起作用。它不画任何东西。谁能告诉我这是怎么回事?LRESULTCALLBACKWndProc(HWNDhWnd,UINTmsg,WPARAMwParam,LPARAMlParam){HDChDC=0;PAINTSTRUCTps;ZeroMemory(&ps,sizeof(PAINTSTRUCT));HPENhp353535=0;RECTrWnd;GetWindowRect(hWnd,&rWnd);switch(msg){caseWM_PAINT://Icould/shouldputGetWindowRect()here..hDC=Begin

c++ - 如何一次创建、处理和销毁多个窗口?

我听说要在我的C++应用程序中创建多个窗口,我需要做的就是创建任意数量的HWND,然后为每个窗口使用CreateWindowEx(),以及适当的窗口类等。我已经做到了,所以这不是问题。现在,通常,我会为我的应用程序制作这种消息循环:MSGmsg;while(1){while(PeekMessage(&msg,hWnd,0,0,PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}if(msg.message==WM_QUIT)break;}(这应该是正确的,是吗?)但是现在我有3个窗口,我的消息循环看起来像这样:MSGmsg