使用Windows窗体和Winsock在C ++中进行多任务处理

时间:2015-03-11 14:43:14

标签: c++ multithreading winforms winsock

我必须编写一个程序,其中包括使用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窗体的多线程程序中使用全局变量?我做错了什么?

0 个答案:

没有答案