您的位置:首页 > 编程语言

代码记录

2015-05-28 21:24 253 查看

创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1秒,两个窗口不能同时售票。

#include "stdafx.h"

#include<windows.h >

#include<iostream>

using namespace std;

//2个线程模拟卖火车票的小程序

DWORD WINAPI Fun1Proc(LPVOID lpParameter); //thread data

DWORD WINAPI Fun2Proc(LPVOID lpParameter); //thread data

int index = 0;

int tickets = 10;

HANDLE hMutex;

int _tmain(int argc, _TCHAR* argv[])

{

HANDLE hThread1;

HANDLE hThread2;

//create thread

hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);

hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);

CloseHandle(hThread1);

CloseHandle(hThread2);

//create mutex object

hMutex = CreateMutex(NULL, TRUE, "tickets");

if (hMutex)

{

if (ERROR_ALREADY_EXISTS == GetLastError())

{

cout << "only one instance can run!" << endl;

return 0;

}

}

WaitForSingleObject(hMutex, INFINITE);

ReleaseMutex(hMutex);

ReleaseMutex(hMutex);

Sleep(4000);

return 0;

}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)

{

while (true)

{

ReleaseMutex(hMutex);

WaitForSingleObject(hMutex, INFINITE);

if (tickets > 0)

{

Sleep(1);

cout << "Thread1 sell ticket: " << tickets-- << endl;

}

else

break;

ReleaseMutex(hMutex);

}

return 0;

}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)

{

while (true)

{

ReleaseMutex(hMutex);

WaitForSingleObject(hMutex, INFINITE);

if (tickets > 0)

{

Sleep(1);

cout << "Thread2 sell ticket: " << tickets-- << endl;

}

else

break;

ReleaseMutex(hMutex);

}

return 0;

}



求一个字符串中连续出现次数最多的子串

pair<int, string> conSubStr(const string &str)

{

vector<string> substrs;

int maxcount = 1, count = 1;

string substr;

int i, len = str.length();

for (i = 0; i < len; ++i)

substrs.push_back(str.substr(i, len - i));

for (i = 0; i < len; ++i)

{//从0,1,....开始

for (int j = i + 1; j < len; ++j)

{//计算长度为1,2,...j-i的子串长度

count = 1;

if (substrs[i].substr(0, j - i) == substrs[j].substr(0, j - i))

{

++count;

for (int k = j + (j - i); k < len; k += j - i)

{

if (substrs[i].substr(0, j - i) == substrs[k].substr(0, j - i)) ++count;

else break;

}

if (count>maxcount)

{

maxcount = count;

substr = substrs[i].substr(0, j - i);

}//endif

}//endif

}//endfor

}//endfor

return make_pair(maxcount, substr);

}



//比较两棵树是否相等


typedef struct TreeNode{

char c;

TreeNode *left;

TreeNode *right;

};

int CompTree(TreeNode *tree1, TreeNode *tree2)

{

bool isTreeNull1 = (tree1 == NULL);

bool isTreeNull2 = (tree2 == NULL);

//其中一个为NULL,而另一个不为NULL,不相等

if (isTreeNull1 != isTreeNull2)return 1;

//两个都为NULL则相等

if (isTreeNull1 && isTreeNull2)return 0;

//都不为NULL,如果c不等,则不相等

if (tree1->c != tree2->c)return 1;

return (CompTree(tree1->left,tree2->left) &&CompTree(tree1->right,tree2->right) ) | (CompTree(tree1->left,tree2->right) && (tree1->right,tree2->left));

}

//递归函数统计字符串中第一个空字符前面的字符长度

int mystrlen(char *buf, int N)

{

if (buf[0] == 0 || N == 0)

return 0;

else if (N == 1)

return 1;

int t = mystrlen(buf, N / 2);

if (t < N / 2)

return t;

else

return (t + mystrlen(buf + N / 2, (N + 1) / 2));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: