linux에서 thread사용..

aaa123의 이미지

 
 
window에서 짠 소스인데 리눅스로 돌리기 위해서 바꾸는 중입니다.
근데 제가 진짜 초보라서요..... 아무리 봐도 thread를 pthread로바꿔서 사용하는 법을 모르겠습니다..
Thread부분 다 오류나구요 struct SOCKADDR_In serv ,  
memset, EncodeFrame *encodeFrame= new EncodeFrame; 이 부분들에서 오류가 납니다.
 
 
#include <netinet/in.h>
 
#include <sys/socket.h>
 
#include <arpa/inet.h>
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <unistd.h>
 
#include <pthread.h>
 
#include "opencv/cv.h"
#include "opencv/highgui.h"
 
typedef unsigned long DWORD;
 
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
typedef struct _MyFrame 
{
	unsigned short width;
	unsigned short height;
	unsigned char nChannels;
	unsigned int imageSize;
	unsigned char imageData[921600];
} MyFrame;
 
typedef struct _EncodeFrame
{
	int type;
	int rows;
	int cols;
	char imageData[921600];
} EncodeFrame;
 
int argWidth = 640, argHeight = 480, argFrame = 15, argRate = 100;
 
int t;
int timer;
 
DWORD WINAPI Thread_Timer(LPVOID param)
{
   timer = 0;
   while (1)
   {
      timer += 50;
 
      Sleep(50);
   }
   return 0;
}
 
#define MODE 0 // Á¼® ½ÿ¡´ÂÁb À·Â Á¼® ¾Èϸéð
DWORD WINAPI Thread_Func(LPVOID param)
{
   char mode;
   int arg[4];
 
   while (1)
   {
#ifdef MODE
      recv(t, &mode, 1, 0);
 
      switch (mode)
      {
      case 1:
         argWidth = 640;
         argHeight = 480;
         argFrame = 30;
         argRate = 50;
 
         break;
      case 2:
         argWidth = 320;
         argHeight = 240;
         argFrame = 20;
         argRate = 50;
 
         break;
 
      case 3:
         argWidth = 160;
         argHeight = 120;
         argFrame = 20;
         argRate = 50;
 
         break;
 
      case 4:
         argWidth = 160;
         argHeight = 120;
         argFrame = 10;
         argRate = 10;
 
         break;
 
      default:
         argWidth = 640;
         argHeight = 480;
         argFrame = 20;
         argRate = 50;
 
         break;
      }
#else
      recv(t, (char *)arg, 16, 0);
 
      argWidth = arg[0];
      argHeight = arg[1];
      argFrame = arg[2];
      argRate = arg[3];
#endif
 
      Sleep(100);
   }
 
   return 0;
}
 
int main (int argc, char **argv)
{
   int feedback[2] = {0};
   char *pFrame = 0;
   MyFrame myFrame;
   EncodeFrame *encodeFrame = new EncodeFrame;
   //WSADATA wsa;
   int s;
   struct SOCKADDR_IN serv;
   CvCapture *capture = 0;
   IplImage *frame = 0;
   double w = 640, h = 480; // 640*480(VGA), 
   int c;
   int i;  
 
/*if(WSAStartup(MAKEWORD(2, 2,), &wsa) != 0)
   {
      printf("Too high Winsock version.\n");
 
      return -1;   
   }*/
 
   s = socket(AF_INET, SOCK_STREAM, 0);
 
   if(s == -1)
   {
      printf("Error in socket()");
 
      close(s);
 
      return -1;
   }
 
   memset(&serv, sizeof(serv));
 
   serv.sin_family = AF_INET;
   serv.sin_port = htons(50000);
   serv.sin_addr.s_addr = inet_addr("127.0.0.1");
 
  if(bind(s,(struct SOCKADDR *)&serv, sizeof(serv)) == -1)
   {
      printf("Error in bind()");
 
      close(s);
 
      WSACleanup();
 
      return -1;
   }
 
   listen(s, 5);
 
   t = accept(s, NULL, NULL);
 
   HANDLE thread = CreateThread(NULL, 0, &Thread_Timer, 0, 0, 0); 
   HANDLE thread2 = CreateThread(NULL, 0, &Thread_Func, 0, 0, 0); 
 
 
 
   feedback[0] = 0xAAAAAAAA;
   feedback[1] = 0;
 
   while(1) 
   {
 
      cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, argWidth);
      cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, argHeight);
 
      int params[3] = {0};
 
      params[0]=CV_IMWRITE_JPEG_QUALITY;
      params[1]=argRate;
 
      frame = cvQueryFrame (capture);
 
      CvMat *EncodeImage = cvEncodeImage(".jpg", frame, params);
 
      encodeFrame->rows = EncodeImage->rows;
      encodeFrame->cols = EncodeImage->cols;
      encodeFrame->type = EncodeImage->type;
 
      for (i; i < encodeFrame->cols; i++)
      {
         encodeFrame->imageData[i] = EncodeImage->data.ptr[i];
      }
 
 
      pFrame = (char *)encodeFrame;
 
      send(t, pFrame, 12 + EncodeImage->cols, 0);
 
      feedback[1] += 12 + EncodeImage->cols;
 
      if ( timer >= 1000)
      {
         char *pTemp = (char *)feedback;
 
         send(t, pTemp, 8, 0);
 
         timer = 0;
 
         feedback[1] = 0;
      }
 
      Sleep((int)(1000. / argFrame));
      cvReleaseMat(&EncodeImage);
   }
 
   cvReleaseCapture (&capture);
 
   close(s);
 
   WSACleanup();
 
   return 0;
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.