我正在研究C#應用程序,並在這裏面臨一個奇怪的問題。我有一個使用C++構建的.dll文件,我必須從C#應用程序中的這個.dll文件中調用一些函數。在C#程序中避免這種競態條件
考慮下面的示例代碼:
public partial class MainWindows: Window
{
public MainWindow()
{
InitializeComponent();
ConfigurationFunctions.StartMain(); //Start main is the DLL function in C++
int x = ConfigurationFunctions.ReturnIntExp();
StringBuilder sb = ConfigurationOptions.ReturnSomethingExp();
}
}
C++ cpp文件
EXPORT_API int xExp;
EXPORT_API char cExp;
EXPORT_API StartMain()
{
//Calculate `x` and `y` in this program values here and allocate to variables to be returned from function
xExp = x;
cExp = c;
}
EXPORT_API int ReturnIntExp()
{
return xExp;
}
EXPORT_API char ReturnSomethingExp()
{
return cExp;
}
問題是,當我請從.dll中StartMain()
功能,它計算用於int
一些值和char
必須分配給變量(實際返回到C#應用程序)
但是,在StartMain()
之後,C#應用程序應該等待StartMain()
函數完成(在這種情況下, 3-4秒,並且dll本身會觸發兩個/三個其他進程),然後才能繼續進行,否則,C#應用程序中的變量x
和sb
將具有空值/無意義的值。
如何在這種情況下達到相同的效果?
我沒有看到問題。函數'StartMain'將工作,直到工作完成。工作完成後,C#應用程序將獲得執行控制權並將繼續調用'ReturnIntExp'。這裏沒有問題。 – Dialecticus 2012-02-22 16:18:27