我必须编写一个程序,其中包括使用TCP / IP进行通信,并且可以通过Windows窗体进行控制。
因此,我使用pthread.h
编写了一个多线程程序。一个线程用于Windows窗体,另一个线程用于Winsock的东西。
int main(int argc, char* argv[])
{
pthread_t t1, t2; // declare 2 threads.
pthread_create(&t1, NULL, RunTCPIP, NULL); // create a thread running TCP-Communication
pthread_create(&t2, NULL, RunForms, NULL); // create a thread running Windows Forms
pthread_exit(NULL);
return 0;
}
void * RunForms(void * argument)
{
//run GUI
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Server_C_GUI::Mainform form;
Application::Run(%form);
return 0;
}
void * RunTCPIP(void * argument)
{
//Winsock-stuff....
return 0;
}
我必须在两个线程中使用一些变量。那是我的问题。我创建了globals.h
,我已经定义了我的全局变量。
#include <string>
using namespace std;
#ifndef EXTERN
#define EXTERN extern
#endif
//Variables for OperatingMode & GUI
EXTERN const string szServerResponse;
EXTERN char cPlay;
EXTERN char cBreak;
EXTERN char cQuit;
我在main.cpp中包含了globals.h
- 它有效。但是当我尝试在globals.h
中包含MyForm.h
时 - 我的CLR Windows窗体的标题 - 出现了几个失败。
例如,在MyForm.h
中,我想编写以下代码:
private:
System::Void btnQuit_Click(System::Object^ sender, System::EventArgs^ e)
{
cQuit = 0; //cQuit = global variable
}
如何在具有Winsock和CLR Windows窗体的多线程程序中使用全局变量?我做错了什么?