我有一个用C++编码的迭代过程需要很长时间,我正在考虑将我的代码转换为使用多个线程.但我担心它可能非常复杂并且存在锁定和错误的风险.但是我怀疑对于这个特殊的问题它可能是微不足道的,但我想要确认.
我希望我可以使用这里简单的线程代码.
我的程序使用了大量的全局数组和结构.我假设如果其他线程试图同时读取相同的数据,则各个线程不需要关注它们.
我还假设如果一个线程想要通过1.5增加一个全局浮点变量而另一个线程想要减去0.1,那么只要我不关心事件的顺序,那么两个线程都会成功完成它们的任务而不用任何特殊代码(如互斥锁和锁等)和浮动最终会增加1.4.如果我所有的假设都是正确的那么我的任务将很容易 - 请告知.
编辑:只是为了使它绝对清楚 - 浮点数递增/递减的顺序并不重要.只要它的价值最终增加1.4,那么我很高兴.在所有线程完成任务之后才会读取 float的值.
编辑:作为一个更具体的例子,成像我们的任务是找到来自美国不同州的慈善机构的捐款总额.我们可以拥有这样的全球:
float total_donations= 0;
Run Code Online (Sandbox Code Playgroud)
然后我们可以有50个单独的线程,每个线程计算一个名为donations_from_this_state的本地浮点数.并且每个线程将单独执行:
total_donations += donations_from_this_state;
Run Code Online (Sandbox Code Playgroud)
显然,线程执行其任务的顺序对最终结果没有任何影响.
所以通过我在网上发现的winapi程序来源,我发现在任何地方都没有WinMain,我想知道是否有可能让winapi程序像这样工作,为什么你认为原来的程序员做了这样的事情,我们有像这样的对话框程序:
static INT_PTR CALLBACK mainDialogProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
{
//..............
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且主入口点就像这样而不是void WINAPI WinMain(void);
void WINAPI entryPoint(void)
{
//........
}
Run Code Online (Sandbox Code Playgroud)
这真的有可能吗?它违背了我迄今为止研究的所有内容......我确信我错过了一些东西......
我对Visual Studio 2013非常有经验,现在我正在升级到VS 2015,并且遇到并向Windows Forms应用程序添加新的数据源.重新创建我的问题非常容易.
这是我的设置:
Visual Studio 2015 Enterprise 2015 Update 3
MySQL for Visual Studio 1.2.6
Connector/Net 6.9.9
注意:根据位于http://dev.mysql.com/doc/visual-studio/en/visual-studio-install.html的支持信息矩阵支持上述配置,我也尝试了其他所有其他配置那里列出的支持软件的排列.
以下是重建问题的方法:
新的C#Windows窗体应用程序
添加新的数据源
数据库
数据集
新连接(连接正常)
保存连接
选择数据库对象
选择任何表格
完成
错误:无法自动生成某些更新命令.数据库返回以下错误:您已经有可用的连接.
感谢任何能够提供我可能做错的线索的人.
当我使用Individual User Accounts身份验证创建ASP.NET Core Web项目时,我注意到VS2015创建了AccountController具有许多操作方法的。这些动作方法大多数都包含输入可选参数string returnUrl = null,在这些方法ViewData["ReturnUrl"] = returnUrl;中,如下面的一个示例所示。
问题:
ViewData["ReturnUrl"] = returnUrl;在这些操作方法中,此可选输入参数和语句的用途是什么?2.什么时候应该在动作方法中使用它们,什么时候应该避免使用它们?获取方法:
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
发布方式:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用.Net framework 4.6.1构建我的ASP.NET核心1.0应用程序
但我一直在低于错误 -
错误无法使以下项目可运行:Apex_POC(.NETFramework,Version = v4.6.1)原因:访问路径'C:\ perforce\CFA\Apex\POC\Apex_POC\src\Apex_POC\bin\Debug \net461\win7-x64\Apex_POC.exe.config'被拒绝.Apex_POC C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
我验证了路径是否正确,并确保没有任何文件夹/文件处于只读模式.
另外,验证我可以写入此文件.文件的当前内容如下(默认情况下,一切都没有从我这边添加) -
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我的环境是VS2015 Professional update3和Windows 7机器.
感谢和问候
维沙尔
当我使用配置设置为release(对于x86和x64)进行编译时,我的程序无法完成.为了澄清,没有构建错误或执行错误.
在寻找问题的原因和解决方案之后,我发现程序只会崩溃作为发布版本 - 如何调试?这提出它是一个数组问题.虽然这解决了我的问题,但它给了我一些关于此事的见解(我将这里留给下一个人).
为了进一步混淆,只有当主线程上的子程序的执行时间大于约0ms时才会出现问题.
以下是相关的代码部分:
// Startup Progress Bar Thread
nPC_Current = 0; // global int
nPC_Max = nPC; // global int (max value nPC_Current will reach)
DWORD myThreadID;
HANDLE progressBarHandle = CreateThread(0, 0, printProgress, &nPC_Current, 0, &myThreadID);
/* Do stuff and time how long it takes (this is what increments nPC_Current) */
// Wait for Progress Bar Thread to Terminate
WaitForSingleObject(progressBarHandle, INFINITE);
Run Code Online (Sandbox Code Playgroud)
我的程序卡在上面的违规行是最后一个语句,程序等待创建的线程终止:
WaitForSingleObject(progressBarHandle, INFINITE);
Run Code Online (Sandbox Code Playgroud)
以下是进度条功能的代码:
DWORD WINAPI printProgress(LPVOID lpParameter)
{
int lastProgressPercent = -1; // …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2015中创建了一个安装程序项目。成功完全构建了该应用程序并安装在我的系统中(我使用的是Windows 10 64位)。但是,当我尝试在32位OS上安装该软件包时,出现了错误消息“此处理器不支持安装软件包”。我已经检查了项目的属性,但是与此没有任何关系。解决方案中的所有项目(我有4个项目)都是通过AnyCPU模式构建的。
当我从中打开配置管理器时,有用于选择其他项目的配置和平台的选项,但是我们不能为安装项目选择平台。我附上了屏幕截图。
希望有人会指导我创建可以使用Visual Studio 2015在32位和64位操作系统上安装的安装程序包。
.net windows windows-installer visual-studio visual-studio-2015
我有一个很棒的项目.
我创建了一个新的独立 .dll项目,其中包含带有一些导出函数的原始项目(将原点.h和.cpp文件复制到新项目中).我从原始项目复制了所有lib依赖项和路径到那些库和其他包含文件.它的设置相同.
新程序编译但问题是,当我尝试运行代码时,我得到了错误信息:
The program can't start because xxx.dll is missing from your computer. Try reinstalling the program to fix this problem.
这xxx.lib是在Additional dependencies名单及其不是第一个:
Additional Dependencies: aaa.lib; bbb.lib; ccc.lib; xxx.lib, zzz.lib
我想VS发现了前三个,.lib否则我会得到一些错误信息..那么为什么不能找到xxx.lib呢?.lib同一文件夹中的所有文件..
谢谢.
在解决方案资源管理器和Visual Studio 2015中的任何编辑器之间切换的键盘快捷方式或命令是什么?可以切换吗?
我想在“选项”>“环境”>“键盘”中搜索此命令,并将键盘快捷方式分配给该命令。
编辑:我希望命令立即在解决方案资源管理器和编辑器上的第一个(或以前使用的)选项卡之间切换视图。