aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2021-08-05 10:43:11 +0200
committerMiguel Costa <miguel.costa@qt.io>2021-08-09 13:01:15 +0000
commitf461d068d96ba6f78b6fda77b14c46476cfe73ff (patch)
tree4879629ce8cc61fb0fe4501e67b9afa01ef6a005 /src
parent6555ac55d49942f079d6da96eb9674dc59295d48 (diff)
Add concurrency test
Added a sample solution that makes it easier to reproduce concurrency issues in parallel builds of Qt/MSBuild projects. A .bat script builds the sample solution in a loop and records any errors. This script can be left to run unattended in order to find concurrency issues that occur infrequently. Change-Id: I006f8436289caf7e8d784fe73c2d1cb5c2ec73e0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/tests/concurrency/Solution1/MyPropertySheet.props10
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.cpp10
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.h13
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.cpp5
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.h9
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj119
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj.filters42
-rw-r--r--src/tests/concurrency/Solution1/QtClassLibrary1/qtclasslibrary1_global.h13
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.cpp11
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.h18
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.qrc4
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.ui28
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj115
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj.filters44
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication1/main.cpp10
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.cpp9
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.h18
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.qrc4
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.ui28
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj115
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj.filters44
-rw-r--r--src/tests/concurrency/Solution1/QtWidgetsApplication2/main.cpp10
-rw-r--r--src/tests/concurrency/Solution1/Solution1.sln43
-rw-r--r--src/tests/concurrency/Solution1/StaticLib1/Header.h4
-rw-r--r--src/tests/concurrency/Solution1/StaticLib1/StaticLib1.cpp3
-rw-r--r--src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj93
-rw-r--r--src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj.filters27
-rw-r--r--src/tests/concurrency/loop_msbuild.bat36
28 files changed, 885 insertions, 0 deletions
diff --git a/src/tests/concurrency/Solution1/MyPropertySheet.props b/src/tests/concurrency/Solution1/MyPropertySheet.props
new file mode 100644
index 00000000..af2b343c
--- /dev/null
+++ b/src/tests/concurrency/Solution1/MyPropertySheet.props
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ImportGroup Label="PropertySheets" />
+ <PropertyGroup Label="UserMacros">
+ </PropertyGroup>
+ <PropertyGroup />
+ <ItemDefinitionGroup />
+ <ItemGroup>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.cpp b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.cpp
new file mode 100644
index 00000000..c5a77aac
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.cpp
@@ -0,0 +1,10 @@
+#include "QtClass.h"
+
+QtClass::QtClass(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QtClass::~QtClass()
+{
+}
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.h b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.h
new file mode 100644
index 00000000..7e9b180d
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClass.h
@@ -0,0 +1,13 @@
+#pragma once
+#include "qtclasslibrary1_global.h"
+
+#include <QObject>
+
+class QTCLASSLIBRARY1_EXPORT QtClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ QtClass(QObject *parent);
+ ~QtClass();
+};
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.cpp b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.cpp
new file mode 100644
index 00000000..10792c43
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.cpp
@@ -0,0 +1,5 @@
+#include "QtClassLibrary1.h"
+
+QtClassLibrary1::QtClassLibrary1()
+{
+}
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.h b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.h
new file mode 100644
index 00000000..68e88384
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "qtclasslibrary1_global.h"
+
+class QTCLASSLIBRARY1_EXPORT QtClassLibrary1
+{
+public:
+ QtClassLibrary1();
+};
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj
new file mode 100644
index 00000000..5be6d898
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{CE78EC51-C4A0-465B-A161-21C257BD057B}</ProjectGuid>
+ <Keyword>QtVS_v304</Keyword>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">10.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">10.0</WindowsTargetPlatformVersion>
+ <QtMsBuild Condition="Exists('$(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild')"
+ >$([System.IO.Path]::GetFullPath(
+ $(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild\QtMsBuild))</QtMsBuild>
+ <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
+ <Import Project="$(QtMsBuild)\qt_defaults.props" />
+ </ImportGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core</QtModules>
+ <QtBuildConfig>debug</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core</QtModules>
+ <QtBuildConfig>release</QtBuildConfig>
+ </PropertyGroup>
+ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
+ <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
+ </Target>
+ <ImportGroup Label="ExtensionSettings" />
+ <ImportGroup Label="Shared" />
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <AllProjectIncludesArePublic>true</AllProjectIncludesArePublic>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <AllProjectIncludesArePublic>true</AllProjectIncludesArePublic>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ProjectReference>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ProjectReference>
+ <UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>QTCLASSLIBRARY1_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <Optimization>MaxSpeed</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>QTCLASSLIBRARY1_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <QtMoc Include="QtClass.h" />
+ <ClInclude Include="qtclasslibrary1_global.h" />
+ <ClInclude Include="QtClassLibrary1.h" />
+ <ClCompile Include="QtClass.cpp" />
+ <ClCompile Include="QtClassLibrary1.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
+ <Import Project="$(QtMsBuild)\qt.targets" />
+ </ImportGroup>
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj.filters b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj.filters
new file mode 100644
index 00000000..5c88d0d9
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/QtClassLibrary1.vcxproj.filters
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="Translation Files">
+ <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier>
+ <Extensions>ts</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="qtclasslibrary1_global.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClCompile Include="QtClassLibrary1.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClInclude Include="QtClassLibrary1.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <QtMoc Include="QtClass.h">
+ <Filter>Header Files</Filter>
+ </QtMoc>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="QtClass.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtClassLibrary1/qtclasslibrary1_global.h b/src/tests/concurrency/Solution1/QtClassLibrary1/qtclasslibrary1_global.h
new file mode 100644
index 00000000..565e06ba
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtClassLibrary1/qtclasslibrary1_global.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <QtCore/qglobal.h>
+
+#ifndef BUILD_STATIC
+# if defined(QTCLASSLIBRARY1_LIB)
+# define QTCLASSLIBRARY1_EXPORT Q_DECL_EXPORT
+# else
+# define QTCLASSLIBRARY1_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define QTCLASSLIBRARY1_EXPORT
+#endif
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.cpp b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.cpp
new file mode 100644
index 00000000..3ae59435
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.cpp
@@ -0,0 +1,11 @@
+#include "QtWidgetsApplication1.h"
+#include "QtClass.h"
+#include "Header.h"
+
+QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
+ : QMainWindow(parent)
+{
+ ui.setupUi(this);
+ qtObject = new QtClass(this);
+ foobar();
+}
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.h b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.h
new file mode 100644
index 00000000..1a76b9a1
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <QtWidgets/QMainWindow>
+#include "ui_QtWidgetsApplication1.h"
+
+class QtClass;
+
+class QtWidgetsApplication1 : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);
+
+private:
+ Ui::QtWidgetsApplication1Class ui;
+ QtClass *qtObject;
+};
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.qrc b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.qrc
new file mode 100644
index 00000000..d56c1ee5
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.qrc
@@ -0,0 +1,4 @@
+<RCC>
+ <qresource prefix="QtWidgetsApplication1">
+ </qresource>
+</RCC>
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.ui b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.ui
new file mode 100644
index 00000000..4d40f03c
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.ui
@@ -0,0 +1,28 @@
+<UI version="4.0" >
+ <class>QtWidgetsApplication1Class</class>
+ <widget class="QMainWindow" name="QtWidgetsApplication1Class" >
+ <property name="objectName" >
+ <string notr="true">QtWidgetsApplication1Class</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>400</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>QtWidgetsApplication1</string>
+ </property> <widget class="QMenuBar" name="menuBar" />
+ <widget class="QToolBar" name="mainToolBar" />
+ <widget class="QWidget" name="centralWidget" />
+ <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources>
+ <include location="QtWidgetsApplication1.qrc"/>
+ </resources>
+ <connections/>
+</UI>
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj
new file mode 100644
index 00000000..5cd0dccc
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{806AF248-25F9-4300-9FB3-100E5F79C026}</ProjectGuid>
+ <Keyword>QtVS_v304</Keyword>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">10.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">10.0</WindowsTargetPlatformVersion>
+ <QtMsBuild Condition="Exists('$(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild')"
+ >$([System.IO.Path]::GetFullPath(
+ $(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild\QtMsBuild))</QtMsBuild>
+ <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
+ <Import Project="$(QtMsBuild)\qt_defaults.props" />
+ </ImportGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core;gui;widgets</QtModules>
+ <QtBuildConfig>debug</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core;gui;widgets</QtModules>
+ <QtBuildConfig>release</QtBuildConfig>
+ </PropertyGroup>
+ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
+ <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
+ </Target>
+ <ImportGroup Label="ExtensionSettings" />
+ <ImportGroup Label="Shared" />
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <CopyLocalProjectReference>true</CopyLocalProjectReference>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <CopyLocalProjectReference>true</CopyLocalProjectReference>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <Optimization>MaxSpeed</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <QtRcc Include="QtWidgetsApplication1.qrc" />
+ <QtUic Include="QtWidgetsApplication1.ui" />
+ <QtMoc Include="QtWidgetsApplication1.h" />
+ <ClCompile Include="QtWidgetsApplication1.cpp" />
+ <ClCompile Include="main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\QtClassLibrary1\QtClassLibrary1.vcxproj">
+ <Project>{ce78ec51-c4a0-465b-a161-21c257bd057b}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\StaticLib1\StaticLib1.vcxproj">
+ <Project>{8463051a-b32c-43f0-9a77-9f223598aac9}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
+ <Import Project="$(QtMsBuild)\qt.targets" />
+ </ImportGroup>
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj.filters b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj.filters
new file mode 100644
index 00000000..4cb63b79
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/QtWidgetsApplication1.vcxproj.filters
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="Form Files">
+ <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
+ <Extensions>ui</Extensions>
+ </Filter>
+ <Filter Include="Translation Files">
+ <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier>
+ <Extensions>ts</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <QtRcc Include="QtWidgetsApplication1.qrc">
+ <Filter>Resource Files</Filter>
+ </QtRcc>
+ <QtUic Include="QtWidgetsApplication1.ui">
+ <Filter>Form Files</Filter>
+ </QtUic>
+ <QtMoc Include="QtWidgetsApplication1.h">
+ <Filter>Header Files</Filter>
+ </QtMoc>
+ <ClCompile Include="QtWidgetsApplication1.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication1/main.cpp b/src/tests/concurrency/Solution1/QtWidgetsApplication1/main.cpp
new file mode 100644
index 00000000..8237fdac
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication1/main.cpp
@@ -0,0 +1,10 @@
+#include "QtWidgetsApplication1.h"
+#include <QtWidgets/QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ QtWidgetsApplication1 w;
+ w.show();
+ return a.exec();
+}
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.cpp b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.cpp
new file mode 100644
index 00000000..d448405a
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.cpp
@@ -0,0 +1,9 @@
+#include "QtWidgetsApplication2.h"
+#include "QtClass.h"
+
+QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
+ : QMainWindow(parent)
+{
+ ui.setupUi(this);
+ qtObject = new QtClass(this);
+}
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.h b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.h
new file mode 100644
index 00000000..8c9701bb
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <QtWidgets/QMainWindow>
+#include "ui_QtWidgetsApplication2.h"
+
+class QtClass;
+
+class QtWidgetsApplication2 : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ QtWidgetsApplication2(QWidget *parent = Q_NULLPTR);
+
+private:
+ Ui::QtWidgetsApplication2Class ui;
+ QtClass* qtObject;
+};
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.qrc b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.qrc
new file mode 100644
index 00000000..2018e6d2
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.qrc
@@ -0,0 +1,4 @@
+<RCC>
+ <qresource prefix="QtWidgetsApplication2">
+ </qresource>
+</RCC>
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.ui b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.ui
new file mode 100644
index 00000000..f9a85f5b
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.ui
@@ -0,0 +1,28 @@
+<UI version="4.0" >
+ <class>QtWidgetsApplication2Class</class>
+ <widget class="QMainWindow" name="QtWidgetsApplication2Class" >
+ <property name="objectName" >
+ <string notr="true">QtWidgetsApplication2Class</string>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>400</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>QtWidgetsApplication2</string>
+ </property> <widget class="QMenuBar" name="menuBar" />
+ <widget class="QToolBar" name="mainToolBar" />
+ <widget class="QWidget" name="centralWidget" />
+ <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources>
+ <include location="QtWidgetsApplication2.qrc"/>
+ </resources>
+ <connections/>
+</UI>
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj
new file mode 100644
index 00000000..0413ccda
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{B74596C2-46DC-4615-A6EF-0CB66643BB2B}</ProjectGuid>
+ <Keyword>QtVS_v304</Keyword>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">10.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">10.0</WindowsTargetPlatformVersion>
+ <QtMsBuild Condition="Exists('$(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild')"
+ >$([System.IO.Path]::GetFullPath(
+ $(MSBuildProjectDirectory)\..\..\..\..\qtmsbuild\QtMsBuild))</QtMsBuild>
+ <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
+ <Import Project="$(QtMsBuild)\qt_defaults.props" />
+ </ImportGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core;gui;widgets</QtModules>
+ <QtBuildConfig>debug</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="QtSettings">
+ <QtInstall>$(DefaultQtVersion)</QtInstall>
+ <QtModules>core;gui;widgets</QtModules>
+ <QtBuildConfig>release</QtBuildConfig>
+ </PropertyGroup>
+ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
+ <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
+ </Target>
+ <ImportGroup Label="ExtensionSettings" />
+ <ImportGroup Label="Shared" />
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\MyPropertySheet.props" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <CopyLocalProjectReference>true</CopyLocalProjectReference>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <CopyLocalProjectReference>true</CopyLocalProjectReference>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <Optimization>MaxSpeed</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <QtRcc Include="QtWidgetsApplication2.qrc" />
+ <QtUic Include="QtWidgetsApplication2.ui" />
+ <QtMoc Include="QtWidgetsApplication2.h" />
+ <ClCompile Include="QtWidgetsApplication2.cpp" />
+ <ClCompile Include="main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\QtClassLibrary1\QtClassLibrary1.vcxproj">
+ <Project>{ce78ec51-c4a0-465b-a161-21c257bd057b}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\StaticLib1\StaticLib1.vcxproj">
+ <Project>{8463051a-b32c-43f0-9a77-9f223598aac9}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
+ <Import Project="$(QtMsBuild)\qt.targets" />
+ </ImportGroup>
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj.filters b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj.filters
new file mode 100644
index 00000000..f8580ae6
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/QtWidgetsApplication2.vcxproj.filters
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="Form Files">
+ <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
+ <Extensions>ui</Extensions>
+ </Filter>
+ <Filter Include="Translation Files">
+ <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier>
+ <Extensions>ts</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <QtRcc Include="QtWidgetsApplication2.qrc">
+ <Filter>Resource Files</Filter>
+ </QtRcc>
+ <QtUic Include="QtWidgetsApplication2.ui">
+ <Filter>Form Files</Filter>
+ </QtUic>
+ <QtMoc Include="QtWidgetsApplication2.h">
+ <Filter>Header Files</Filter>
+ </QtMoc>
+ <ClCompile Include="QtWidgetsApplication2.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/QtWidgetsApplication2/main.cpp b/src/tests/concurrency/Solution1/QtWidgetsApplication2/main.cpp
new file mode 100644
index 00000000..8f58a279
--- /dev/null
+++ b/src/tests/concurrency/Solution1/QtWidgetsApplication2/main.cpp
@@ -0,0 +1,10 @@
+#include "QtWidgetsApplication2.h"
+#include <QtWidgets/QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ QtWidgetsApplication2 w;
+ w.show();
+ return a.exec();
+}
diff --git a/src/tests/concurrency/Solution1/Solution1.sln b/src/tests/concurrency/Solution1/Solution1.sln
new file mode 100644
index 00000000..4069cb33
--- /dev/null
+++ b/src/tests/concurrency/Solution1/Solution1.sln
@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30804.86
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QtClassLibrary1", "QtClassLibrary1\QtClassLibrary1.vcxproj", "{CE78EC51-C4A0-465B-A161-21C257BD057B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QtWidgetsApplication1", "QtWidgetsApplication1\QtWidgetsApplication1.vcxproj", "{806AF248-25F9-4300-9FB3-100E5F79C026}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QtWidgetsApplication2", "QtWidgetsApplication2\QtWidgetsApplication2.vcxproj", "{B74596C2-46DC-4615-A6EF-0CB66643BB2B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StaticLib1", "StaticLib1\StaticLib1.vcxproj", "{8463051A-B32C-43F0-9A77-9F223598AAC9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CE78EC51-C4A0-465B-A161-21C257BD057B}.Debug|x64.ActiveCfg = Debug|x64
+ {CE78EC51-C4A0-465B-A161-21C257BD057B}.Debug|x64.Build.0 = Debug|x64
+ {CE78EC51-C4A0-465B-A161-21C257BD057B}.Release|x64.ActiveCfg = Release|x64
+ {CE78EC51-C4A0-465B-A161-21C257BD057B}.Release|x64.Build.0 = Release|x64
+ {806AF248-25F9-4300-9FB3-100E5F79C026}.Debug|x64.ActiveCfg = Debug|x64
+ {806AF248-25F9-4300-9FB3-100E5F79C026}.Debug|x64.Build.0 = Debug|x64
+ {806AF248-25F9-4300-9FB3-100E5F79C026}.Release|x64.ActiveCfg = Release|x64
+ {806AF248-25F9-4300-9FB3-100E5F79C026}.Release|x64.Build.0 = Release|x64
+ {B74596C2-46DC-4615-A6EF-0CB66643BB2B}.Debug|x64.ActiveCfg = Debug|x64
+ {B74596C2-46DC-4615-A6EF-0CB66643BB2B}.Debug|x64.Build.0 = Debug|x64
+ {B74596C2-46DC-4615-A6EF-0CB66643BB2B}.Release|x64.ActiveCfg = Release|x64
+ {B74596C2-46DC-4615-A6EF-0CB66643BB2B}.Release|x64.Build.0 = Release|x64
+ {8463051A-B32C-43F0-9A77-9F223598AAC9}.Debug|x64.ActiveCfg = Debug|x64
+ {8463051A-B32C-43F0-9A77-9F223598AAC9}.Debug|x64.Build.0 = Debug|x64
+ {8463051A-B32C-43F0-9A77-9F223598AAC9}.Release|x64.ActiveCfg = Release|x64
+ {8463051A-B32C-43F0-9A77-9F223598AAC9}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {76259E50-26CE-4EC6-99CE-B1245F270DD3}
+ EndGlobalSection
+EndGlobal
diff --git a/src/tests/concurrency/Solution1/StaticLib1/Header.h b/src/tests/concurrency/Solution1/StaticLib1/Header.h
new file mode 100644
index 00000000..22475e74
--- /dev/null
+++ b/src/tests/concurrency/Solution1/StaticLib1/Header.h
@@ -0,0 +1,4 @@
+#pragma once
+
+void foobar();
+
diff --git a/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.cpp b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.cpp
new file mode 100644
index 00000000..6b623059
--- /dev/null
+++ b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.cpp
@@ -0,0 +1,3 @@
+void foobar()
+{
+}
diff --git a/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj
new file mode 100644
index 00000000..77f3c437
--- /dev/null
+++ b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>16.0</VCProjectVersion>
+ <Keyword>Win32Proj</Keyword>
+ <ProjectGuid>{8463051a-b32c-43f0-9a77-9f223598aac9}</ProjectGuid>
+ <RootNamespace>StaticLib1</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v142</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <AllProjectIncludesArePublic>true</AllProjectIncludesArePublic>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <AllProjectIncludesArePublic>true</AllProjectIncludesArePublic>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <SubSystem>
+ </SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <SubSystem>
+ </SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="StaticLib1.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="Header.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj.filters b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj.filters
new file mode 100644
index 00000000..ce5268c9
--- /dev/null
+++ b/src/tests/concurrency/Solution1/StaticLib1/StaticLib1.vcxproj.filters
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="StaticLib1.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="Header.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/tests/concurrency/loop_msbuild.bat b/src/tests/concurrency/loop_msbuild.bat
new file mode 100644
index 00000000..4c98cba4
--- /dev/null
+++ b/src/tests/concurrency/loop_msbuild.bat
@@ -0,0 +1,36 @@
+@ECHO OFF
+
+SET TOTAL=0
+SET FAIL=0
+SET RATE=0
+SET USER_QUIT=0
+SET PAD=..00
+
+:loop
+ CLS
+ SET RATE=%PAD%%RATE%
+ ECHO ################################################################################
+ ECHO # Total: %TOTAL%, Failed: %FAIL%...%RATE:~-4,-2%,%RATE:~-2%%%
+ ECHO ################################################################################
+ IF %USER_QUIT% EQU 1 GOTO quit
+ SET /A "TOTAL+=1"
+ msbuild %* ^
+ /m /bl /v:m /nologo ^
+ && (
+ DEL last_build_ok.binlog 2> NUL
+ COPY msbuild.binlog last_build_ok.binlog > NUL
+ ) || (
+ SET /A "FAIL+=1"
+ COPY msbuild.binlog error_build_%TOTAL%.binlog > NUL
+ )
+ SET /A "RATE=(FAIL*100*100)/(TOTAL)"
+ ECHO ################################################################################
+ CHOICE /C QNOP /N /T 1 /D N /M "# [N]ext / [O]pen Log / [P]ause / [Q]uit ?"
+ IF %ERRORLEVEL% EQU 3 (
+ START "" msbuild.binlog
+ PAUSE
+ )
+ IF %ERRORLEVEL% EQU 4 PAUSE
+ SET USER_QUIT=%ERRORLEVEL%
+ GOTO :loop
+:quit